webview内存泄漏处理----无效请喷我

首先不得不吐槽一下,谷歌的webview太坑爹了,一大堆问题。和ios的webview简直一个屌丝一个高富帅。


在开发过程中公司那边有一些h5模板就各种嵌套webview展示界面,但是加载的页面如果有很多图片就会发现内存占用暴涨,并且在退出该界面后。
即使在包含该webview的Activity的destroy()方法中,使用webview.destroy();webview=null;对内存占回收用还是没有任何效果。
可以说谷歌配套的webview销毁处理方法是一点软用都没有,而且当webview加载的网页的图片等内存文件还会一直占用手机内存---我都无力吐槽了。
------------------------------------解决方案:-
第一种:
在manifest.xml中包含webview的activity中声明一个android:process=“your package name.aaa”

这一种要注意点:实际上这种处理方法是将这个页面独立出一个进程,意思就是你开了这个页面webview加载的图片等在关闭界面时,就相当于关闭这个创建出来的小程序,就不会影响应用内存泄漏了。
但是缺陷就是这个页面与应用的消息传递就会出问题,例如eventbus就会失效。

第二种:
创建一个 FrameLayout作为父容器,webview通过动态的在创建添加:

--------在xml中:

<FrameLayout
    android:id="@+id/webview_contain"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"></FrameLayout>
--------在代码中new出来webview:
if (mWebview==null){
    mWebview=new WebView(getApplicationContext());//注意getApplicationContext生命周期短不会产生内存泄漏
}
FrameLayout mWebContainer= (FrameLayout) findViewById(R.id.web_container);
//手动的添加到父容器显示
mWebContainer.addView(mWebview);
//手动的父容器从移除显示
if (mWebview!=null){
    mWebview=null;
    mWebContainer.removeView(mWebview);
}
------通常内存移除写法:
好了,这种方法最普遍使用了,当然父容器不一定是FrameLayout,也可以是ListView等可以add进去的。

-------------------------------------------------------

最后总结:百度搜索一大堆博客,后面测试完内存后竟然都基本没用,坑了我一大堆时间,这两种方法亲测消除内存泄漏,不行来喷我啊,默默表示没机会。如果要demo,请留言评论,谢谢。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值