webview的一些坑
摘要:
WebViewClient.onPageFinished()
。你永遠無法確定當WebView呼叫這個方法的時候,網頁內容是否真的載入完畢了。當前正在載入的網頁產生跳轉的時候這個方法可能會被多次呼叫,StackOverflow上有比較具體的解釋(How to li...
- WebViewClient.onPageFinished() 。你永遠無法確定當WebView呼叫這個方法的時候,網頁內容是否真的載入完畢了。當前正在載入的網頁產生跳轉的時候這個方法可能會被多次呼叫,StackOverflow上有比較具體的解釋(How to listen for a Webview finishing loading a URL in Android? ), 但其中列舉的解決方法並不完美。所以當你的WebView需要載入各種各樣的網頁並且需要在頁面載入完成時採取一些操作的話,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠譜一些。
- WebView後臺耗電問題 。當你的程式呼叫了WebView載入網頁,WebView會自己開啟一些執行緒(?),如果你沒有正確地將WebView銷燬的話,這些殘餘的執行緒(?)會一直在後臺執行,由此導致你的應用程式耗電量居高不下。對此我採用的處理方式比較偷懶,簡單又粗暴(不建議),即在Activity.onDestroy()中直接呼叫System.exit(0),使得應用程式完全被移出虛擬機器,這樣就不會有任何問題了。
- 切換WebView閃屏問題 。如果你需要在同一個ViewGroup中來回切換不同的WebView(包含了不同的網頁內容)的話,你就會發現閃屏是不可避免的。這應該是Android硬體加速的Bug,如果關閉硬體加速這種情況會好很多,但無法獲得很好的瀏覽體驗,你會感覺網頁滑動的時候一卡一卡的,不跟手。
- 資料積累問題 。開啟快取什麼的有利於網頁的瀏覽體驗,但你會發現即使是清除了必要的內容,比如Cache、Cookie、Form Data、History、Password等等東西,你的應用程式所佔用的儲存空間還是會越來越大,到最後只好手動到系統設定的應用資訊介面裡清除資料了 :(
- 滾動條問題 。Android System WebView的橫向滾動條真是好粗的有木有…
- 在某些手機上,Webview有視訊時 ,activity銷燬後,視訊資源沒有被銷燬,甚至還能聽到在後臺播放。即便是像剛才那樣各種銷燬webview也無濟於事,解決辦法:在onDestory之前修改url為空地址。是不是很坑?