記錄一些webview比較隱晦難查的問題。web
系統字體改變大小影響WebView內網頁的字體大小:設置WebView.setTextZoom(100),字體大小就只會由網頁改動,不隨系統變化。chrome
三星手機進入webview後息屏一分鐘再亮屏退出webview再進入,webview白屏:三星手機部分系統有「特殊的」省電優化,息屏後會致使webview內部長鏈接斷開,任何請求都失效了。解決辦法:每次進來都從新建立webview,所以退出的時候必需要銷燬,也保證了不會形成內存泄露。但是依然存在息屏後繼續操做webview,這時候網頁內全部的請求失效,此問題沒有很好的解決辦法,webview也沒有提供對應的重連api,可行方案:部分手機亮屏刷新頁面,直接重建webview。api
webview內存泄露:緩存
1. 須要動態建立:WebView webview = new WebView(context);
2. 銷燬:
if(webview != null ){
webview.destroy();
ViewGroup parent = (ViewGroup)webview.getParent();
if(parent != null){
parent.removeView(webview);
}
webview = null;
}
複製代碼
webview返回上一級老是會刷新:從二級頁面返回到上一級無法控制不刷新。方案:1. webview.setCacheMode(LOAD_CACHE_ONLY), 只用緩存這種方式基本不適合大部分需求。2. 跳到二級頁面時從新建立一個webview,實現下返回邏輯。可是若是層級太多也不適合,適合那種一級頁面強制要求不能返回刷新,二級以上的頁面沒有這種限制的需求。bash
網頁沒法播放視頻、滑動不暢:開啓硬件加速。性能
開啓硬件加速的問題:字體
持續更新中。。。優化
總結:webview的坑不少,H5性能上本就是一個很大的痛點,webview還搞這麼多事兒。。若是項目中問題不少的話,能夠嘗試下騰訊x5內核,兼容性更強、速度更快、大廠的技術支持,但依然會碰到一些坑。而且如今也有不少的熱更新方案:ReactNative、Weex等等,但兼容性都不是很好,要根據業務場景進行抉擇了。spa
ps :最適合本身的纔是最好的。code