β

关于Android的WebView控件加载网页慢的原因

让我靠近你,我的宝贝 768 阅读
 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资源加载情况。

发表评论