Andriod内存泄露之WebView

泄露原因

在这次开发过程中,需要用到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


然后在关闭webactivity时销毁进程

@Overrideprotected void onDestroy() {                
     super.onDestroy(); 
     System.exit(0);
}

关闭浏览器后便销毁整个进程,这样一般95%
的情况下不会造成内存泄漏之类的问题,但这就涉及到android进程间通讯,比较不方便处理, 优劣参半,也是可选的一个方案

解决方案二 不要在布局文件添加WebView

首先使用webview的时候,不在xml里面声明,而是直接代码new个对象,传入application context防止activity引用滥用.

webView =  new BridgeWebView(getContext().getApplicationContext());
webFrameLayout.addView(webView, 0);

在使用了这个方式后,基本上90%的webview内存泄漏的问题便得以解决

你可能感兴趣的:(Andriod内存泄露之WebView)