美文网首页
WebView的整理

WebView的整理

作者: 纸狒 | 来源:发表于2019-07-05 16:42 被阅读0次

    一,webView的常见的一些坑;

    二,关于webView的内存泄露问题;


                                          一,webView之前的坑

    1,API16以及之前的版本存在着远程代码执行安全漏洞。该漏洞源于程序没有正确使用webView.addJavascriptInterface方法,远程攻击者可以通过使用Java  Reflection  API利用该漏洞执行任意java对象的方法。(即利用反射机制攻击其他为注册的java类)

    2,webView在布局文件中的使用:webView写在其他的容器中时:

    利用addView动态将webView添加入容器中,

    当销毁时,要在onDestory()方法中把webView销毁,然后才能真正地销毁整个webView。

    具体销毁的步骤:

    先把容器中的webView调用remove方法移除,即到onDestory()方法中调用webView的removeAllViews();,和webView的destory方法;

    转载:以下是Android避免WebView内存泄漏的方法

    原文:https://blog.csdn.net/weixin_34323858/article/details/88157190

    @Override

    protected void onDestroy() {

    super.onDestroy();

    if (mWebView != null) {

    //加载null内容

    mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);

    //清除历史记录

    mWebView.clearHistory();

    //移除WebView

    ((ViewGroup) mWebView.getParent()).removeView(mWebView);

    //销毁VebView

    mWebView.destroy();

    //WebView置为null

    mWebView = null;

    }

    }

    收藏:webview内存泄漏终极解决方案

    https://www.jianshu.com/p/aa5a99b565e7

    该博文介绍了关于webview内存泄漏的一些方法,其中讲到,上面的方法其实没有太多作用,因此她采用了:

    1,另起一个进程加载webview,页面销毁后干掉这个进程。(用于webview业务逻辑间没有交互的情况),但另起一个进程,要占用CPU时间,主进程需要等待接受信息,那么势必会慢一些。

    2,文中还利用了一些实例进行介绍。

    webview的一些相关的知识和问题

    1,jsbridge:让本地的navi端可调用远端的js代码,可以远端web调用本地的navi

    2,webViewClient.onPageFinished - > webChromeClient.onProgressChanged

    前一个方法是加载完成回调时:用于判断是否加载,若加载中跳转,则会调用无数次

    后一个方法则时加载多次,且有操作,靠谱。

    3,后台耗电:

      webView自己开线程,残余线程留着,耗电居高不下,在Activity的onDestory()方法中直接调用System.exit()方法,可以销毁掉webView,且直接关虚拟机

    4,webView硬件加速导致页面渲染问题

    安卓3.0开始硬件加速,容易出现界面闪烁,页面白块,可以通过设置webView展示关闭硬件加速来解决问题。


                                三,关于webView内存泄漏问题

    1,解决webView内存泄漏的问题的方法:

                   开启独立进程,简单粗暴,不过可能会涉及到进程间的通信。

    问题的描述:

               1,webView关联Activity     

    =>     2,内部    

    =>     3,在新线程中,时间无法确定 。导致webView不能一直持有Activity的引用,因此没有办                法回收。

              原因:Activity的生命周期和新线程webView的生命周期不一样。

    原理:

                匿名内部类持有外部类的引用,导致外部类无法回收。

    关键词:    独立进程,进程间通信

    2,动态添加webView,对传入webview中使用的Context使用弱引用,动态添加webView,意思是在布局创建webGroup用来放置webView,Activity创建时add进来,在activity停止(即销毁)时,remove掉。

    相关文章

      网友评论

          本文标题:WebView的整理

          本文链接:https://www.haomeiwen.com/subject/bhgjhctx.html