WebView的坑

一、WebView開發中常見的一些坑

1、WebView常見的坑

在Android API Level 16(Android4.1和4.1.1)及以前的版本存在遠程代碼執行安全漏洞,該漏洞是因爲程序沒有正確執行WebView.addJavaScriptInterface()方法,遠程攻擊者可以通過使用Java
Reflection API 執行任意java對象的方法

2、WebView在佈局文件中的使用

當webView動態的添加到佈局中(如添加到LinearLayout中),在onDestroy()方法中必須要先將webview從LinearLayout中remove掉,然後再調用webview的removeAllViews()和destroy()方法,這樣才能將webview真正銷燬,而不會導致內存泄漏

3、jsbridge

實現web端和native互調

4、webviewClient.onPageFinished()

這個方法表示加載頁面完成時會回調這個方法,但是這個方法有一些坑,因爲它會判斷加載的網頁內容是否真的加載完畢了,如果當前加載的網頁發生跳轉的時候,這個方法會被調用無數次。所以webChromeClient.onProgressChanged()這個方法

5、後臺耗電

當程序開啓了webview加載網頁的時候,會自動開啓線程,如果沒有將webview銷燬的話,這些殘餘的線程會在後臺運行,導致耗電問題嚴重,簡單粗暴的處理方式是在Activity的onDestroy()中調用System.exit(0)方法將虛擬機關閉

6、WebView硬件加速導致頁面渲染問題

如果你需要在同一個ViewGroup中來回切換不同的WebView(包含了不同的網頁內容)的話,你就會發現閃屏是不可避免的。這應該是Android硬件加速的Bug,如果關閉硬件加速這種情況會好很多,但無法獲得很好的瀏覽體驗,你會感覺網頁滑動的時候一卡一卡的,不跟手。

二、關於WebView的內存泄漏問題

webview首先肯定要關聯一個Activity,而webview裏面執行的操作是在新的線程當中所以Activity的生命週期和WebView的生命週期沒有綁定,導致了webview會一直持有Activity的引用,導致Activity不能回收.

1、獨立進程,簡單暴力,不過涉及到進程間通信

2、在佈局中創建ViewGroup,在Activity創建的時候,動態的將webview通過add進ViewGroup中,在Activity停止的時候Remve掉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章