在這次開發過程中,需要用到webview展示但是當頻繁的退出再進入包含WebView 的Activit時,會出現內存泄露。有人說,一旦在你的xml布局中引用了webview甚至沒有使用過,都會阻礙重新進入application之后對內存的gc。包括使用MapView有時一會引發OOM,幾經周折在網上看到各種解決辦法,在這里跟大家分享一下。但是到目前為止還沒有找到根本的解決辦法,網上也有說是sdk的bug。但是不管怎么樣,我們還是需要使用的。
在混合型app中WebView是主角,一切由它呈現,如58同城,趕集網等;在另一些超級app中亦有它的影子,微信,QQ,支付寶,沒有一個超級app能少了它,既能展示最新最潮的實時資訊,又能扮演盤踞一方的全功能型網站,與native結合后又能扮演諸如公眾號之內的應用等等,其能力可想而知。
然而WebView內存泄漏是眾所周知的,建議另外啟動一個進程專門運行WebView。不要9998,不要9999,我們要100%!WebView用完之后就把進程殺死,即使泄漏了也無礙。
對于封裝的webactivity,在manifest.xml
<activity android:name=".webview.WebViewActivity" android:launchMode="singleTop" android:PRocess=":remote" android:screenOrientation="unspecified" />然后在關閉webactivity時銷毀進程
@Overrideprotected void onDestroy() { super.onDestroy(); System.exit(0);}關閉瀏覽器后便銷毀整個進程,這樣一般95%的情況下不會造成內存泄漏之類的問題,但這就涉及到android進程間通訊,比較不方便處理, 優劣參半,也是可選的一個方案
首先使用webview的時候,不在xml里面聲明,而是直接代碼new個對象,傳入application context防止activity引用濫用.
webView = new BridgeWebView(getContext().getApplicationContext());webFrameLayout.addView(webView, 0);在使用了這個方式后,基本上90%的webview內存泄漏的問題便得以解決
新聞熱點
疑難解答