优化Android中的WebView控件加载网页速度
影响WebView加载网页慢的因素是多种的,要根据自身情况灵活组合使用,下面说几个可以参考的优化项
1、使把图片加载放在最后来加载渲染
先关闭图片的导入
_settings.setBlockNetworkImage(true); //使把图片加载放在最后来加载渲染
然后在onPageFinished事件中,再打开图片的导入
@Override
public void onPageFinished(WebView pView,String pURL){
super.onPageFinished(pView,pURL);
pView.getSettings().setBlockNetworkImage(false); //解除图片数据阻止
//可以关闭进度框之类的信息
}
这一项对于图片较多的页面,效果最明显,可以有效加块页面导入速度
2、开启缓存
webView数据缓存分为两种,AppCache和DOM Storage(Web Storage)
二者都推荐开启,即可以加快网页的加载性能,又可以减少网页错误概率
_settings.setDomStorageEnabled(true);
_settings.setAppCacheEnabled(true);
同时,根据网络情况,设置一下缓存模式,也可以不设置,使用默认模式
if(NetworkHelper.isNetworkAvaiable(pFragment.getContext())){
_settings.setCacheMode(WebSettings.LOAD_DEFAULT); // 如果联网根据cache-control决定是否从网络上取数据
}else{
_settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //先查找缓存,没有的情况下从网络获取。
}
// 可以读取文件缓存(manifest生效)
_settings.setAllowFileAccess(true);
3、开启硬件加速
硬件加速可以在一下四个级别开启或关闭:
(1)Application
(2)Activity
(3)Window
(4)View
1、Application级别
在应用程序AndroidManifest.xml文件为application标签添加如下的属性即可为整个应用程序开启硬件加速:
<application android:hardwareAccelerated="true" ...>
2、Activity级别
可以控制每个activity是否开启硬件加速,只需在activity元素中添加android:hardwareAccelerated属性即可办到。
比如下面的例子,在application级别开启硬件加速,但在某个activity上关闭硬件加速。
<application
android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>
3、Window级别
如果需要更小粒度的控制,可以使用如下代码开启某个window的硬件加速:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
4、View级别
可以在运行时用以下的代码关闭单个view的硬件加速:
testView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);