APP中使用WebView加载h5网页显示商品详情。由于H5中掺杂大量图片,导致WebView加载超级慢,尤其在网速30k/s的弱网速情况下,显示相当糟糕。
于是,着手开始优化webView的显示问题。
主要从如下方面进行:
1、提高渲染的优先级
// webSettings.setRenderPriority(RenderPriority.HIGH);
2、使把图片加载放在最后来加载渲染
webSettings.setBlockNetworkImage(true);
3,使用硬件加速,该功能在Android 3.0 (API level 11)才加入。
参考:http://developer.android.com/guide/topics/graphics/hardware-accel.html
4、开启缓存
// 开启H5(APPCache)缓存功能
webSettings.setAppCacheEnabled(true);
// webView数据缓存分为两种:AppCache和DOM Storage(Web Storage)。
// 开启 DOM storage 功能
webSettings.setDomStorageEnabled(true);
// 应用可以有数据库
webSettings.setDatabaseEnabled(true);
// 根据网络连接情况,设置缓存模式,
if (UtilTools.isConnected()) {
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);// 根据cache-control决定是否从网络上取数据
} else {
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);// 先查找缓存,没有的情况下从网络获取。
}
// 可以读取文件缓存(manifest生效)
webSettings.setAllowFileAccess(true);
上述措施,都是在优化webView的设置以提高WebView加载H5的效果。但往往情况并不是这么简单,有时候你还需要具体分析下是什么情况造成H5加载慢?
比如我遇到的情况是h5中内容很单一,链接了大量图片资源,所以加载起来慢。
当然还有一些情况可能是H5中的JS等导致加载慢,具体可参考:
http://www.cnblogs.com/xinye/p/3144139.html
你可以实现:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url,
Bitmap favicon) {
Log.d(TAG,"开始加载网页。");
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
Log.d(TAG,"加载资源--"+url);
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d(TAG,"网页加载结束");
//view.getSettings().setBlockNetworkImage(false);
super.onPageFinished(view, url);
}
});
来检查下你h5资源加载情况。