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,请留言评论,谢谢。

猜你喜欢

转载自blog.csdn.net/insist_hui/article/details/66477330
今日推荐