WebView的整理

一,webView的常見的一些坑;

二,關(guān)于webView的內(nèi)存泄露問題;


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一,webView之前的坑

1,API16以及之前的版本存在著遠程代碼執(zhí)行安全漏洞。該漏洞源于程序沒有正確使用webView.addJavascriptInterface方法,遠程攻擊者可以通過使用Java? Reflection? API利用該漏洞執(zhí)行任意java對象的方法。(即利用反射機制攻擊其他為注冊的java類)

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

利用addView動態(tài)將webView添加入容器中,

當(dāng)銷毀時,要在onDestory()方法中把webView銷毀,然后才能真正地銷毀整個webView。


具體銷毀的步驟:

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


轉(zhuǎn)載:以下是Android避免WebView內(nèi)存泄漏的方法

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

@Override

protected void onDestroy() {

super.onDestroy();

if (mWebView != null) {

//加載null內(nèi)容

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

//清除歷史記錄

mWebView.clearHistory();

//移除WebView

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

//銷毀VebView

mWebView.destroy();

//WebView置為null

mWebView = null;

}

}

收藏:webview內(nèi)存泄漏終極解決方案

http://www.itdecent.cn/p/aa5a99b565e7


該博文介紹了關(guān)于webview內(nèi)存泄漏的一些方法,其中講到,上面的方法其實沒有太多作用,因此她采用了:

1,另起一個進程加載webview,頁面銷毀后干掉這個進程。(用于webview業(yè)務(wù)邏輯間沒有交互的情況),但另起一個進程,要占用CPU時間,主進程需要等待接受信息,那么勢必會慢一些。

2,文中還利用了一些實例進行介紹。

webview的一些相關(guān)的知識和問題

1,jsbridge:讓本地的navi端可調(diào)用遠端的js代碼,可以遠端web調(diào)用本地的navi

2,webViewClient.onPageFinished - > webChromeClient.onProgressChanged

前一個方法是加載完成回調(diào)時:用于判斷是否加載,若加載中跳轉(zhuǎn),則會調(diào)用無數(shù)次

后一個方法則時加載多次,且有操作,靠譜。

3,后臺耗電:

? webView自己開線程,殘余線程留著,耗電居高不下,在Activity的onDestory()方法中直接調(diào)用System.exit()方法,可以銷毀掉webView,且直接關(guān)虛擬機

4,webView硬件加速導(dǎo)致頁面渲染問題

安卓3.0開始硬件加速,容易出現(xiàn)界面閃爍,頁面白塊,可以通過設(shè)置webView展示關(guān)閉硬件加速來解決問題。


? ? ? ? ? ? ? ? ? ? ? ? ? ? 三,關(guān)于webView內(nèi)存泄漏問題

1,解決webView內(nèi)存泄漏的問題的方法:

? ? ? ? ? ? ? ?開啟獨立進程,簡單粗暴,不過可能會涉及到進程間的通信。

問題的描述:

? ? ? ? ? ?1,webView關(guān)聯(lián)Activity? ? ?

=>? ? ?2,內(nèi)部? ??

=>? ? ?3,在新線程中,時間無法確定 。導(dǎo)致webView不能一直持有Activity的引用,因此沒有辦? ? ? ? ? ? ? ? 法回收。

? ? ? ? ? 原因:Activity的生命周期和新線程webView的生命周期不一樣。

原理:

? ? ? ? ? ? 匿名內(nèi)部類持有外部類的引用,導(dǎo)致外部類無法回收。


關(guān)鍵詞:? ? 獨立進程,進程間通信


2,動態(tài)添加webView,對傳入webview中使用的Context使用弱引用,動態(tài)添加webView,意思是在布局創(chuàng)建webGroup用來放置webView,Activity創(chuàng)建時add進來,在activity停止(即銷毀)時,remove掉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容