2013-10-10 4 views
1

Я мог бы использовать некоторую помощь, идентифицирующую проблему в моем коде относительно фрагментов и веб-просмотров. Я попытался реализовать некоторые из решений в других потоках безуспешно. Я протестировал тот же самый фрагмент, который был заменен без создания webview внутри, и утечки нет. Есть идеи? Если нет, может ли кто-нибудь представить альтернативное решение?Android Fragment Webview Memory Leak

Вот мой 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

Веб-просмотр был только раздражающим утечкой где-то еще в приложении. Это правильный способ правильно уничтожить веб-просмотр. Маркировка как ответ. – azdragon2