首页 > 学院 > 开发设计 > 正文

Andriod内存泄露之WebView

2019-11-06 09:40:03
字体:
来源:转载
供稿:网友

泄露原因

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

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

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

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

简书地址:http://www.jianshu.com/p/c2412918b2b5


上一篇:Swift笔记

下一篇:git使用

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表