我正在开发自定义浏览器,它可以像普通浏览器那样打开更多标签。我的浏览器活动由ViewPager组成。选项卡在片段中实现 - 每个WebView在ViewPager中都有自己的片段(选项卡)。从ViewPager动态添加/删除选项卡。
分析内存转储我发现,从分页器中删除的WebFragments不会被垃圾收集并保留在内存中。在Memory Analysis透视图中,我用来列出带有传入引用的WebFragments,然后使用选项“Merge Shortst Paths to GC Roots” - > “排除所有幻像/弱/软等参考”。这就是我所看到的:
顶部的“App”是我的应用程序上下文,在底部你可以看到我泄露的WebFragment及其上面的javascript界面(JSInterface)。
我以标准方式在WebFragment中添加我的JSInterface:
webView.addJavascriptInterface(new JSInterface(), JSInterface.JSINTERFACE_NAME);
(JSInterface是WebFragment中的私有类)
JS接口会导致我的WebFragment泄漏吗?我怎么能摆脱它呢?谢谢!
答案 0 :(得分:2)
显然,您的javascript界面仍由WebKit
部分引用。
致电removeJavaScriptInterface(JSInterface.JSINTERFACE_NAME);
明确推荐它。
答案 1 :(得分:1)
尝试将JSInterface
设为静态。