【发布时间】:2010-06-28 07:16:29
【问题描述】:
我有一个使用嵌入 WebView 的 xml 布局的活动。我根本没有在我的活动代码中使用 WebView,它所做的只是坐在我的 xml 布局中并且可见。
现在,当我完成活动时,我发现我的活动并未从内存中清除。 (我通过 hprof 转储检查)。如果我从 xml 布局中删除 WebView,则活动将完全清除。
我已经试过了
webView.destroy();
webView = null;
在我的活动的 onDestroy() 中,但这并没有多大帮助。
在我的 hprof 转储中,我的活动(名为“浏览器”)具有以下剩余的 GC 根(在对其调用 destroy() 之后):
com.myapp.android.activity.browser.Browser
- mContext of android.webkit.JWebCoreJavaBridge
- sJavaBridge of android.webkit.BrowserFrame [Class]
- mContext of android.webkit.PluginManager
- mInstance of android.webkit.PluginManager [Class]
我发现另一位开发人员也遇到过类似的事情,请参阅 Filipe Abrantes 的回复: http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
确实是一个非常有趣的帖子。 最近我过得很艰难 解决我的内存泄漏问题 安卓应用。最终结果是 我的 xml 布局包括一个 WebView 组件,即使不使用,是 防止记忆被 g-在屏幕旋转/应用程序后收集 重启……这是当前的错误吗 实施,或者有什么 具体到什么时候需要做 使用 WebViews
现在,很遗憾,博客或邮件列表上还没有关于这个问题的回复。因此我想知道,这是 SDK 中的错误(可能类似于报告的 http://code.google.com/p/android/issues/detail?id=2181 的 MapView 错误)还是如何通过嵌入的 webview 完全脱离内存?
【问题讨论】:
-
动态创建WebView会出现这种情况吗?
-
我刚刚测试过,但没有任何区别。
-
同时我在code.google.com/p/android/issues/detail?id=9375 提交了一个错误报告,但也许有人有解决方法;那么请发布它。
-
好的。另一个几乎没有修改的测试:当我以编程方式创建 WebView 并将“this”(活动)设置为上下文时,活动仍将保留在内存中。但是,当我使用 getApplicationContext() 时,没关系,并且在没有任何保留引用的情况下删除了活动。