android WebView內存溢出

在調試一個android APP時,重複的調用創建一個webview Activity,盯着android studio 的 Android Profiler看,發現Memery佔用從300M慢慢的疊加到了1個G,最後發生GC強制回收內存,屏幕閃爍一下後,App自動重啓回到主頁界面。

一開始以爲是WebView未釋放內存的原因,就去找了釋放WebView內存的方法。有說法webview在佈局文件內配置,內存是無法主動釋放的。webView的推薦配置是動態生成,Activity銷燬時主動釋放內存。


private RelativeLayout mywebLayout;
private WebView web;

@Override
protected void onCreate(Bundle savedInstanceState) {
    mywebLayout = (RelativeLayout) findViewById(R.id.mywebLayout);

    web = new WebView(this);
    web.setLayoutParams(new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
    mywebLayout.addView(web);
}

@Override
public void onDestroy() {
    super.onDestroy();

    mywebLayout.removeView(web);
    web.removeAllViews();
    web.destroy();
}

然後我發現自己後來又踩了個坑:

WebView Activity 在註冊表裏配置爲singTask單例模式, 在WebView Activity內聲明變量private WebView web,在動態生成webview時又聲明瞭一次

WebView web = new WebView(this); 

導致每次生成一個新的WebView對象,原有的WebView對象永遠無法釋放,導致內存爆炸

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