2013-10-10 112 views
1

我可以使用一些幫助來確定我的代碼中有關片段和Web視圖的問題。我試圖在其他線程中執行一些解決方案失敗。我已經測試了這個片段被替換而沒有在內部創建的webview,並沒有泄漏。有任何想法嗎?如果沒有,任何人都可以提出替代解決方案?Android片段Webview內存泄漏

這裏是我的WebView片段:

public class CustomWebViewFragment extends PageFragment 
{ 

private LinearLayout mWebContainer; 
private WebView mWebView; 


/** 
* public View onCreateView(LayoutInflater inflater, ViewGroup container, 
* Bundle savedInstanceState) 
*/ 
@SuppressLint("SetJavaScriptEnabled") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View v = inflater.inflate(R.layout.fragment_one, container, false); 

    //If I comment this line out, there is no memory leak 
    mWebView = new WebView(this.getActivity().getApplicationContext()); 

    return v; 
} 


/** 
* public void onDestroy() 
*/ 
@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    if (mWebView != null) 
    { 
     mWebView.loadUrl("about:blank"); 
     mWebView.destroy(); 
     mWebView = null; 
    } 
} 

}

這裏是我是如何變化的片段:

@Override 
public void onNavSelected(String page) 
{ 
    if (page != null && !page.equals("")) 
    { 
     System.gc(); 
     if (page.equalsIgnoreCase(GlobalConstants.PAGE_1)) 
     { 
      mCurrent = getFragment(); // Creates a new fragment 
      getSupportFragmentManager().beginTransaction() 
       .replace(R.id.main_fragment, mCurrent).commit(); 
     } 
    } 
} 
+0

感謝mWebView.loadUrl( 「關於:空白」)。這確定了我的內存泄漏! – Deepscorn

回答

2

變化

//If I comment this line out, there is no memory leak 
mWebView = new WebView(this.getActivity().getApplicationContext()); 

&

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    if (mWebView != null) 
    { 
     mWebView.loadUrl("about:blank"); 
     mWebView.destroy(); 
     mWebView = null; 
    } 
} 

mWebView = new WebView(getActivity()); 

&

@Override 
public void onDestroy() 
{ 
    // null out before the super call 
    if (mWebView != null) 
    { 
     mWebView.loadUrl("about:blank"); 
     mWebView = null; 
    } 
    super.onDestroy(); 
} 
+0

我現在試過了。仍有內存泄漏。 – azdragon2

+0

你可以添加內存泄漏日誌語句給你的問題,這將有助於縮小範圍。 – petey

+0

Webview只是在應用程序中的其他地方泄漏泄漏。這是正確銷燬webview的正確方法。標記爲答案。 – azdragon2