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);
}

這種處理方式毫無疑問可以防止內存泄露,而且代碼量也比較小。而其帶來的副作用也是顯而易見的—你需要處理多進程的問題。如果業務不復雜,那麼使用這種方式是沒有問題的,如果業務比較複雜,建議還是不要使用此方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章