Android WebView引起内存泄露

WebView会引起内存泄露这是地球人都知道的事情了,这是因为如果在xml文件中定义WebView的话,WebView会对当前的Activity持有引用,这样会引起Activity无法正常销毁从而引起Activity的内存泄露。
解决方式:
一、手动添加WebView,手动销毁
1.不要在XML中声明WebView,而是在Activity中手动添加

//Activity的onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //LinearLayout的作用是承载WebView
    LinearLayout linearLayout = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
    //Context对象要传Application
    mWebView = new WebView(getApplicationContext());
    linearLayout.addView(mWebView,params);
    //将LinearLayout设置给Activity
    setContentView(linearLayout);
}

2.手动销毁WebView

/**
* activity的onDestroy()方法
*/
@Override
protected void onDestroy() {

    //注意WebView的处理要写在super.onDestroy()之前
    if (mWebView != null) {

        mWebView.loadDataWithBaseURL(null,"","text/html","utf-8",null);
        mWebView.stopLoading();

       
        ViewGroup parent = (ViewGroup) mWebView.getParent();
        if (parent != null) {
            parent.removeView(mWebView);
        }
        mWebView.clearHistory();
        mWebView.destroy();
         mWebView=null;
    }

    super.onDestroy();

}

这种处理方式网上对其效果褒贬不一,有说有效果的,有说没有效果的,估计是不同的版本效果不一致,甚至不同的机型效果都可以不一致,这里仅作记录使用
二、多进程
在Android开启多进程非常简单,你只需要给需要开启多进程的Activity或者Service指定process属性即可
1.Manifest的配置

<activity android:name=".home.activity.WebActivity" android:process=":web">
<intent-filter>
<action android:name="com.test.home.activity.WebActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

2.启动代码

Intent intent = new Intent("com.test.home.activity.WebActivity");
startActivity(intent);

3.销毁代码

/**
* activity的onDestroy()方法
*/
@Override
protected void onDestroy() {
super.onDestroy();
//销毁新开启的进程
System.exit(0);
}

这种处理方式毫无疑问可以防止内存泄露,而且代码量也比较小。而其带来的副作用也是显而易见的—你需要处理多进程的问题。如果业务不复杂,那么使用这种方式是没有问题的,如果业务比较复杂,建议还是不要使用此方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值