Webview优化总结

版权声明:转载请声明 https://blog.csdn.net/qq_34457684/article/details/83791749

@webView

(一) webview常见的一些坑

  1. Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用webView.addjavascriptInterface方法,远程攻击者可通过使用java Reflection API 利用该漏洞执行任意java对象的方法
  2. webview在布局文件中的使用 :webview写在其他容器时
  3. jsbride
  4. webviewClient.onPageFinished->webChromeClieent.onProgressChanged
  5. 后台耗电
  6. webview硬件加速导致页面渲染问题

优化

1、首先可以开启webView的缓存功能,减少对服务器资源的请求。

WebSettings websetting = webview.getSettings();
websetting.setDomStorageEnabled(true);    //开启DOM形式存储
websetting.setDatabaseEnabled(true);   //开启数据库形式存储
websetting.setAppCacheEnabled(true);  //开启缓存功能
websetting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  

2、一些不需要更新的资源可以采用存储到本地然后去加载的方式比如图片、js文件、css文件等~
3、客户端可以从ui上进行优化,首先可以采用自定义的webView new 的时候传getApplicationContext(),不要把webView写在xml文件里面,如果界面没有其他布局采用framlayout包裹的方式动态的添加webView然后在ondestory的时候再移除;

webFrameLayout = (FrameLayout) view.findViewById(R.id.webFrameLayout);
mWebView = new WebView(getContext().getApplicationContext());
webFrameLayout.addView(mWebView, 0);


public void onDestroy() {
    mWebView.onPause();
    mWebView.destroy();
    mWebView = null;
    webFrameLayout.removeAllViews();
    System.gc();
    super.onDestroy();
}

4、把使用了WebView的Activity(或者Service)放在单独的进程里。然后在检测到应用占用内存过大有可能被系统干掉或者它所在的Activity(或者Service)结束后,调用System.exit(0),主动Kill掉进程。
谷歌针对webView有如下描述

Android 中的 WebView 存在很大的兼容性问题,不仅仅是 Android 系统版本的不同对 WebView 产生很大的差异,另外不同的厂商出货的 ROM 里面 WebView 也存在着很大的差异。更严重的是标准的 WebView 存在内存泄露的问题,看这里WebView causes memory leak - leaks the parent Activity。所以通常根治这个问题的办法是为 WebView 开启另外一个进程,通过 AIDL 与主进程进行通信,WebView 所在的进程可以根据业务的需要选择合适的时机进行销毁,从而达到内存的完整释放。
综上,我们在使用webView的时候,需要特别注意防止OOM,可以从以上几个方面进行优化,防止bug,加快加载速度

猜你喜欢

转载自blog.csdn.net/qq_34457684/article/details/83791749