带有JavascriptInterface的Android WebView - 内存泄漏?

时间:2014-03-13 16:45:57

标签: android android-fragments memory-leaks webview

我正在开发自定义浏览器,它可以像普通浏览器那样打开更多标签。我的浏览器活动由ViewPager组成。选项卡在片段中实现 - 每个WebView在ViewPager中都有自己的片段(选项卡)。从ViewPager动态添加/删除选项卡。

分析内存转储我发现,从分页器中删除的WebFragments不会被垃圾收集并保留在内存中。在Memory Analysis透视图中,我用来列出带有传入引用的WebFragments,然后使用选项“Merge Shortst Paths to GC Roots” - > “排除所有幻像/弱/软等参考”。这就是我所看到的: screenshot

顶部的“App”是我的应用程序上下文,在底部你可以看到我泄露的WebFragment及其上面的javascript界面​​(JSInterface)。

我以标准方式在WebFragment中添加我的JSInterface:

webView.addJavascriptInterface(new JSInterface(), JSInterface.JSINTERFACE_NAME);

(JSInterface是WebFragment中的私有类)

JS接口会导致我的WebFragment泄漏吗?我怎么能摆脱它呢?谢谢!

2 个答案:

答案 0 :(得分:2)

显然,您的javascript界面​​仍由WebKit部分引用。

致电removeJavaScriptInterface(JSInterface.JSINTERFACE_NAME);明确推荐它。

答案 1 :(得分:1)

尝试将JSInterface设为静态。