1、webview常見的一些坑
1)android API level 16 以及以前的版本存在遠(yuǎn)程代碼執(zhí)行漏洞,該漏洞由于程序沒有正確限制使用webview.addJavascriptInterface方法,遠(yuǎn)程攻擊者可以通過使用Java ReflectionAPI利用該漏洞執(zhí)行任意Java對(duì)象方法。
2)webview在布局文件中的使用:webview寫在其他容器時(shí),需要注意的是,當(dāng)你需要銷毀webview的時(shí)候,在onDestory方法里面先把LinearLayout里面的webview Remove掉然后再調(diào)用webview的removeAllViews和webview的destory方法這樣才真正的銷毀整個(gè)webview而不會(huì)導(dǎo)致內(nèi)存泄漏問題。
3)jsbridge:是一個(gè)很熱門的技術(shù),他是一個(gè)通過JavaScript與Java構(gòu)建一個(gè)橋?qū)嶋H上JsBridge的卻是Js和Native之前的一種通訊方法。簡(jiǎn)單地說,JsBridge就是定義Native和Js的通訊,Native只通過一個(gè)固定的對(duì)象調(diào)用Js,Js也只通過固定的對(duì)象調(diào)用Native。
4)webviewClient.onPageFinished->webChromeClient.onProgressChanged,前者就是表示當(dāng)加載完成頁面的時(shí)候就會(huì)回調(diào)onPageFinished這個(gè)方法,這個(gè)方法會(huì)判斷你這個(gè)網(wǎng)頁是否真的加載完畢,當(dāng)前正在加載的網(wǎng)頁如果你產(chǎn)生跳轉(zhuǎn)的時(shí)候這個(gè)方法就會(huì)被調(diào)用無數(shù)次,當(dāng)你的加載各種各樣的網(wǎng)頁的時(shí)候并且要完成一些操作的時(shí)候最好還是調(diào)用webChromeClient.onProgressChanged這個(gè)方法。
5)后臺(tái)耗電:當(dāng)程序開啟webview加載網(wǎng)頁的時(shí)候webview會(huì)自己開啟線程,如果沒有很好將webview銷毀的話殘余的線程就會(huì)一直在后臺(tái)運(yùn)行,導(dǎo)致引用程序耗電量居高不下。可以采取在Activity的onDestory方法里面銷毀WebView。
6)webview硬件加速導(dǎo)致頁面渲染問題:容易出現(xiàn)頁面加載帶塊同時(shí)界面閃爍的現(xiàn)象。解決辦法是,設(shè)置webview暫時(shí)關(guān)閉硬件加速。
2、關(guān)于webview的內(nèi)存泄露問題
1)獨(dú)立進(jìn)程就是開啟一個(gè)單獨(dú)的進(jìn)程給webview操作、簡(jiǎn)單暴力、不過可能涉及到進(jìn)程間的通信。
2)動(dòng)態(tài)添加webview,傳入webview中使用的Context使用弱引用,動(dòng)態(tài)添加webview意思是在布局中創(chuàng)建一個(gè)viewgroup用來放置webview,Activity創(chuàng)建add進(jìn)來,在activity停止時(shí)remove掉。