【发布时间】:2014-04-18 14:04:06
【问题描述】:
我正在开发自定义浏览器,它能够像普通浏览器一样打开更多选项卡。我的浏览器活动由 ViewPager 组成。标签在 Fragments 中实现 - 每个 WebView 在 ViewPager 中都有自己的片段(标签)。选项卡在 ViewPager 中动态添加/删除。
分析内存转储我发现,从寻呼机中删除的 WebFragments 不是垃圾收集并留在内存中。从内存分析的角度来看,我使用传入引用列出我的 WebFragments,然后使用选项“合并到 GC 根的最短路径”->“排除所有幻象/弱/软等引用”。这就是我所看到的:
顶部的“App”是我的应用程序上下文,在底部你可以看到我泄露的WebFragment及其上方的javascript接口(JSInterface)。
我以标准方式在 WebFragment 中添加我的 JSInterface:
webView.addJavascriptInterface(new JSInterface(), JSInterface.JSINTERFACE_NAME);
(JSInterface是WebFragment中的私有类)
JS 接口会导致我的 WebFragment 泄漏吗?我怎样才能摆脱它?谢谢!
【问题讨论】:
-
可能您的
JSInterface引用了上下文? -
不,JSInterface 不引用任何对象,除非它的 WebFragment 需要能够与之合作(参见 curtisLoew 的回答)
标签: android android-fragments memory-leaks webview