2013-07-19 27 views
3

在我的应用程序有两个活动,即A和B.的WebView吃了太多的内存

活动答:

它有一个短暂显示有关项目的信息列表。当点击了某个项目,它加载活动B.

活动B:

它有两个网站的观点和几个列表视图。活动顶部被标题网页视图占用。活动的下半部分有选项卡主机,它在第一个选项卡中托管第二个Web视图,其余选项卡每个托管一个列表视图。

问题:

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

  1. 添加的Web视图动态地将容器[RelativeLayout的]中。在活动中删除的WebView的OnDestroy
  2. 分入级的Web视图作为SO文章中建议
  3. 清除网页视图缓存每次等

不管堆大小不回来什么是导航到前B.

真的很感激,如果有人能指导我可能修复

注:

我已阅读过此内容,并在SO上关注此问题。 Memory leak in 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) 

我过通过采取堆转储之前和B开始和destoryed检查后的数字(按照建议中提到here了),堆的大小是相当接近一个我得到它在原木

+0

什么是堆的大小?你在哪里得到数字? – Leonidos

+1

已采取堆转储并使用了SO中建议的方法。看到我的编辑 – JeeZ

+0

它是否会导致OOM?如果没有,也许这只是某种优化?您是否尝试过(用于测试)调用GC,以查看堆大小是否恢复正常?顺便说一句,你不必使用堆转储。 DDMS中已经有一个按钮来显示堆的状态(另外还可以通过编程的方式来完成)。 –

回答

8

我遵循一系列的步骤,并减少了内存占用。这就是我所做的, 而不是通过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; 
     } 
} 

我从Activity的onDetachedFromWindow方法调用releaseWebView()方法如下。

@Override 
public void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    releaseWebViews(); 
} 
+2

大,那肯定解决我的问题我的回答 –