WebView面試詳解

1、WebView常見的一些坑

1.1Android API 16以及之前的版本存在遠程代碼執行安全漏洞,該漏洞源于程序沒有正確限制使用WebView.addJavascriptInterface方法,遠程攻擊裝可以通過使用Java Reflection API利用該漏洞執行任意Java對象的方法

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

動態添加webview,對傳入webview中使用的Context使用弱引用,動態添加webview意思在布局創建個viewGroup用來放置webview,Activity創建時add進來,在Activity停止時remove掉。否則你在webview調用destory時,webview仍綁定在Activity上,容易引起內存泄露。因此需要先從父容器中移除webview,然后再銷毀webview:

rootLayout.removeView(webView);

webView.destroy();

1.3jsbride

通過jsbride可以實現H5和native層方法互調

1.4webviewClient.onPageFinished->webChromeClieent.onProgressChanged

onPageFinished:頁面加載完成的時候會回調這個方法,但是這個方法有缺陷如果當前正在加載的網頁產生跳轉的時候這個方法可能會被多次調用。所以需要盡量避免在onPageFinished()中做業務操作,否則會導致重復調用,還有可能會引起邏輯上的錯誤。所以建議使用onProgressChanged

1.5后臺耗電

當你的程序調用了WebView加載網頁,WebView會自己開啟一些線程,如果你沒有正確地將WebView銷毀的話,這些殘余的線程。會一直在后臺運行,由此導致你的應用程序耗電量居高不下。對此我采用的處理方式比較偷懶,簡單又粗暴(不建議),即在Activity.onDestroy()中直接調用System.exit(0),使得應用程序完全被移出虛擬機,這樣就不會有任何問題了

1.6webview硬件加速導致頁面渲染問題

webview開啟硬件加速之后,頁面的滑動會更加順暢。但是也有一個問題易出現頁面加載白塊和頁面閃爍的現象。解決方法就是關閉硬件加速。

1.7數據積累問題

開啟緩存什么的有利于網頁的瀏覽體驗,但你會發現即使是清除了必要的內容,比如Cache、Cookie、Form Data、History、Password等等東西,你的應用程序所占用的存儲空間還是會越來越大,到最后只好手動到系統設置的應用信息界面里清除數據了

2、關于WebView內存泄露問題

泄露原因:WebView會關聯一個Activity,而WebView內部執行的操作是在一個新的線程當中。執行時間其實Activity是沒有辦法確定的,Activity的生命周期和這個新線程的生命周期是不一樣的。所以就導致了這個WebView會一直持有這個Activity的引用,不能回收。

2.1獨立進程,簡單暴力,不過可能涉及到進程間通信

<android:name=".WebviewActivity"

android:process=":h5"

android:screenOrientation="portrait"

android:configChanges="orientation|screenSize|keyboardHidden"

/>

每個獨立的進程都能分配獨立的內存,這樣的話,你的app可以獲得雙倍的內存,其中一半給Webview吃。增大Webview獲得的內存,變相的減小內存泄露產生OOM的概率。

在適當時機直接殺掉Webview獨立進程,什么內存泄露,內存占用巨大的問題都見鬼去吧。要問什么時機?比如退出app時,檢測到沒有Webview頁面時。

Webview發生崩潰時不會導致app閃退,因為Webview是在獨立進程中,如果發生崩潰,主進程還安然無事,app還在運行中,沒有閃退。

2.2動態添加webview,對傳入webview中使用的Context使用弱引用,動態添加webview意思在布局創建個viewGroup用來放置webview,Activity創建時add進來,在Activity停止時remove掉

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,372評論 25 708
  • 一、WebView 常見的一些坑 1. webview 在android api16以及之前版本的安全漏洞,該漏洞...
    千涯秋瑟閱讀 1,970評論 1 17
  • 一.Webview常見的一些坑 1.Android API level 16以及之前的版本存在遠程代碼執行安全漏洞...
    xiaolong20閱讀 276評論 0 0
  • 3月27日正式入小灶群,開始的幾天活力滿滿,像注了雞血一樣,改了以往午睡的習慣,用來寫晨讀,看書,晚上哄女兒睡著以...
    留逝時光閱讀 294評論 1 7
  • 這算性騷擾嗎?—— 一次和老婆正在逛街, 走著走著兩人討論起性騷擾的問題。 我突然伸手快速的摸了一下老婆的胸部, ...
    范末末閱讀 265評論 2 2