我有一个使用xml布局的活动,其中嵌入了WebView。我根本没有在活动代码中使用WebView,它所做的只是在xml布局中显示
现在,当我完成活动时,我发现我的活动没有从内存中清除。(我通过hprof转储进行检查)。但是,如果我从xml布局中删除WebView,活动将完全清除
我已经试过了
webView.destroy();
webView=null;
在我的活动的onDestroy()中,但这没有多大帮助
在我的hprof转储中,我的活动(名为“Browser”)具有以下剩余的GC根(在对其调用了destroy()之后):
com.myapp.android.activity.browser.browser
-android.webkit.JWebCoreJavaBridge的mContext
-android.webkit.BrowserFrame的sJavaBridge[类]
-android.webkit.PluginManager的McContext
-android.webkit.PluginManager[类]的实例
我发现另一位开发者也经历过类似的事情,请参见Filipe Abrantes关于:
http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
这确实是一篇非常有趣的帖子。
最近我过得很艰难
对我的计算机上的内存泄漏进行故障排除
安卓应用。结果证明
我的xml布局包含一个WebView
即使未使用,也被
防止内存丢失
g-屏幕旋转后收集/app
重启…这是当前的错误吗
实施,还是有什么
一个人在什么时候需要做什么
使用网络视图
现在,不幸的是,博客或邮件列表上还没有关于这个问题的回复。因此我想知道,SDK中是否存在一个bug(可能与报道的MapView bug类似)http://code.google.com/p/android/issues/detail?id=2181)或者如何使用嵌入的webview将活动完全从内存中删除
我从上面的评论和进一步的测试中得出结论,问题是SDK中的一个bug:当通过XML布局创建WebView时,活动作为WebView的上下文传递,而不是应用程序上下文。当完成活动时,WebView仍然保留对该活动的引用,因此该活动不会从内存中删除。
我为此提交了一份bug报告,请参见上面评论中的链接
webView=newwebview(getApplicationContext());
请注意,此解决方案仅适用于某些用例,即如果您只需要在Web视图中显示html,而不需要任何href链接或对话框链接等。请参阅下面的注释。