【发布时间】:2015-05-14 21:41:30
【问题描述】:
我一直在使用工具 leakcanary 来发现我的应用程序中的内存泄漏。看来我的 WebViewActivity 每次都会泄漏。
我创建了一个简单的应用程序来测试泄漏。我使用 xml 布局文件中的 WebView 启动一个活动/使用活动上下文膨胀。关掉。一切默认都期望一个简单的 webViewClient 在 WebView 中保持重定向。每次都会漏水。
我已经做了大量的研究,防止这种情况的唯一方法是使用另一个进程启动 WebViewActivity 并在 onDestroy 中将其杀死。但是这种方法也有自己的缺点。
在我所有运行 5.0+ 的设备上每次都会发生泄漏,尚未检查 4.3 及以下版本。
泄漏信息粘贴在下面:
在 com.example.webviewmemoryleaktest:1.0:1 中。 * com.example.webviewmemoryleaktest.WebViewActivity 已泄露: * GC ROOT android.os.ResultReceiver$MyResultReceiver.this$0 * 引用 org.chromium.content.browser.ContentViewCore$2$1.this$1(匿名类扩展 android.os.ResultReceiver) * 参考 org.chromium.content.browser.ContentViewCore$2.this$0 * 参考 org.chromium.content.browser.ContentViewCore.mContext * 参考 com.android.webview.chromium.ResourcesContextWrapperFactory$WebViewContextWrapper.mBase * 泄露 com.example.webviewmemoryleaktest.WebViewActivity 实例
- 参考密钥:9a0346cf-6ad9-4b07-9329-a975d8fa3cbe
- 设备:LGE google Nexus 4 occam
- Android 版本:5.1 API:22
- 持续时间:watch=5139ms, gc=188ms, heap dump=2822ms, analysis=30918ms
如果有人可以提供帮助,不胜感激。谢谢!
【问题讨论】:
-
github.com/square/leakcanary/issues/92#issuecomment-102181372 -- 他们有一个文档化的过程来处理基于 Android 框架代码的泄漏。这也涵盖了in the LeakCanary documentation。
-
当您不再需要 WebView 并将其从视图层次结构中删除时,您是否调用
WebView.destroy()doc? -
是的,我做了 mWebView.destroy()/mWebView = null/mWebView.load(about:blank),它们都不适合我。
-
您是否找到任何解决方法并报告给 Google?我也面临同样的问题
-
我也是。看起来它应该在 Chromium 42 (code.google.com/p/chromium/issues/detail?id=473146) 中修复,但我的 System WebView 在 44 上并且仍然发生泄漏。
标签: android memory-leaks webview garbage-collection leakcanary