【问题标题】:memory leak with Android WebViewAndroid WebView 的内存泄漏
【发布时间】:2014-03-07 22:14:12
【问题描述】:

我在这里阅读了各种帖子并尝试使用所有提示,但仍然失败。应用程序的每个实例都在不断积累更多内存。这是代码sn-p。有什么想法吗?只需使用 WebView 启动页面...

private class MyWV extends WebViewClient
{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
        {
                Log.d("MyWV", "shouldOverrideUrlLoading, url = " +url);
                return false;
        }
}

@Override
public void onCreate(Bundle icicle) {
    Log.d(TAG, "onCreate");
    Toast.makeText(getApplicationContext(), "Please wait...", Toast.LENGTH_LONG).show();

    super.onCreate(icicle);
    setContentView(R.layout.main);

    mFL = (FrameLayout) findViewById(R.id.base_layout);

    mWebView = new WebView(this);
    mFL.addView(mWebView);

    mWebView.setWebViewClient(new MyWV());

    Log.e(TAG,"onCreate: Calling setJavaScriptEnabled...");
    mWebView.getSettings().setJavaScriptEnabled(true);

    mWebView.loadUrl("http://www.yahoo.com");
}

@Override
protected void onDestroy() {
    Log.d(TAG, "onDestroy");

    mFL.removeAllViews();

    mWebView.removeAllViews();
    mWebView.clearHistory();
    mWebView.loadUrl("about:blank");
    mWebView.freeMemory();
    mWebView.destroy();
    mWebView = null;

    super.onDestroy();
}

【问题讨论】:

  • 无论如何记住 onDestroy 被调用(不总是被调用)当应用程序完成“永远”(被操作系统杀死)而不是当屏幕旋转时(在这种情况下调用 onCreate)

标签: android memory webview memory-leaks


【解决方案1】:

根据Memory leak in WebView,尝试使用应用程序上下文创建 WebView:

mWebView = new WebView(getApplicationContext());

【讨论】:

【解决方案2】:

经过大量调试,发现它与Linux内存无关。这是我们在图形堆管理中搞砸的东西。找到了解决办法,现在生活很正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2011-07-15
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多