WebView占用了太多内存

Jee*_*van 5 android android-webview

在我的应用程序中有两个活动,即A和B.

活动A:

它有一个列表,可以简要显示有关项目的信息.单击A上的项目时,它会加载活动B.

活动B:

它有两个Web视图和几个列表视图.活动顶部由标题Web视图占用.活动的下半部分具有选项卡主机,它在第一个选项卡中托管第二个Web视图,其余每个选项卡都包含一个列表视图.

问题:

当用户从A导航到B时,堆大小会显着增加.即使在我从B导航回A之后,堆大小仍然是相同的.甚至没有字节减少,实际上它有时会增加.是的,因为这些网页浏览量.我已阅读有关SO和其他网站上的Web视图内存泄漏的信息.我按照这里提到的方法

  1. 在容器[RelativeLayout]中动态添加Web视图.删除了onDestroy活动的webview
  2. 在SO文章中建议的子分类Web视图
  3. 每次清除Web视图缓存等

无论什么堆大小都没有回到导航到B之前的状态.

真的很感激,如果有人可以指导我找到可能的解决办法

注意:

我已经阅读了这篇文章并在SO上关注了这个问题. WebView中的内存泄漏

编辑:

我已经尝试过在B中没有Web视图,并且堆大小的增加非常小于0.5 MB但是在Web视图中它的折痕增加了4-5 MB

堆大小日志(按照所提建议得到了在这里)

onCreate B
debug.heap native: allocated 4.11MB of 4.17MB (0.01MB free) in []    
debug.memory: allocated: 12.00MB of 96.00MB (1.00MB free)


onDestroy B
debug.heap native: allocated 8.66MB of 10.08MB (0.48MB free) in []    
debug.memory: allocated: 12.00MB of 96.00MB (1.00MB free)

on Resume A    
debug.heap native: allocated 7.94MB of 10.08MB (1.32MB free) in []
debug.memory: allocated: 12.00MB of 96.00MB (0.00MB free)
Run Code Online (Sandbox Code Playgroud)

我通过在B启动之前和之后进行堆转储来交叉检查数字并且崩溃,堆大小非常接近我在日志中获得的堆大小

Jee*_*van 15

我遵循一系列步骤,减少了内存占用.这就是我所做的,而不是通过xml静态创建webview我现在以编程方式创建webview并将其添加到容器中.一旦不再需要webview,我将从容器中删除webview,然后从webview中删除所有视图并在其上调用destroy.最终分配的内存减少了.

private void releaseWebView() {

    webViewContainerRelView.removeAllViews();
        if(mWebView != null){
            mWebView.setTag(null);          
            mWebView.clearHistory();
            mWebView.removeAllViews();          
            mWebView.clearView();
            mWebView.destroy();
            mWebView = null;
        }
}
Run Code Online (Sandbox Code Playgroud)

我从Activity的onDetachedFromWindow方法调用releaseWebView(),如下所示.

@Override
public void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    releaseWebViews();
}
Run Code Online (Sandbox Code Playgroud)