android webview内存泄漏,Android开发经验谈:webview内存泄漏

看了很多WebView内存泄漏的博文,很多文章都有多多少少的问题。

我便在我自己的博文中仔细针对webView内存泄漏进行分析。

看这篇文章的人都应该对webview深恶痛绝

怎么总是释放不掉呢???

释放不掉的原因是啥呢???

为啥特么的总是阴魂不散呢???

答:webView内部的一些线程持有activity对象,导致activity无法释放。继而内存泄漏。

解决:

方案一:退出程序调用System.exit(0);

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.gif

弊:太暴力,只能在程序退出后清除持有。

方案二:activity弱应用持有private WeakReference webActivityReference = new WeakReference(this);

bridgeWebView = new BridgeWebView(webActivityReference .get());

bridgeWebView.setLayoutParams(params);

container.addView(bridgeWebView);

在销毁中执行 @Override

protected void onDestroy() {        super.onDestroy();        //防止webView内存泄漏

if (bridgeWebView != null) {            //先从父容器中移除webview,然后再销毁webview

ViewParent parent = bridgeWebView.getParent();            if (parent != null) {

((ViewGroup) parent).removeView(bridgeWebView);

}

bridgeWebView.stopLoading();            // 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错

bridgeWebView.getSettings().setJavaScriptEnabled(false);

bridgeWebView.clearHistory();

bridgeWebView.clearView();

bridgeWebView.removeAllViews();            try {

bridgeWebView.destroy();

} catch (Throwable ex) {

}

bridgeWebView = null;            this.webActivityReference.clear();            this.webActivityReference = null;

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.gif

说明:

看了很多文章,文中大多都建议不在xml中写webview,都没有说明原因。主要是xml中创建的webview持有Activity的context对象

方案三:新建进程

缺点:新建进程比较麻烦的在于进程间通讯

还存在如下问题静态成员和单例模式失效

线程同步机制失效

SharedPreferences 可靠性降低

Application 被多次创建

优点:

增加应用可用的内存空间,不与主进程竞争内存空间,不使用进程则销毁。

通讯方式AIDL:功能强大,支持进程间一对多的实时并发通信,并可实现 RPC (远程过程调用)。

Messenger:支持一对多的串行实时通信, AIDL 的简化版本。

Bundle:四大组件的进程通信方式,只能传输 Bundle 支持的数据类型。

ContentProvider:强大的数据源访问支持,主要支持 CRUD 操作,一对多的进程间数据共享,例如我们的应用访问系统的通讯录数据。

BroadcastReceiver:即广播,但只能单向通信,接收者只能被动的接收消息。

文件共享:在非高并发情况下共享简单的数据。

Socket:通过网络传输数据。

实例://xml配置activity,在remoteweb进程中

android:process=":remoteweb"/>

作者:王二蛋和他的狗

链接:https://www.jianshu.com/p/44492888aae3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值