一捌治,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.reibang.com/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掉吼鳞。