安卓 WebView - JavaScript 内存泄漏

4
我在WebView中使用Javascript时遇到了问题(使用webview.getSettings().setJavascriptEnabled(true)启用)。嵌入Javascript的HTML页面能够正确加载和显示,但我还不断地每隔10或30秒刷新屏幕。当我进入测试设备(MK808 mini-tv)的shell时,我使用“dumpsys meminfo”来查看进程的内存。每5秒钟显示一次应用程序进程的内存使用情况,我可以看到每当页面刷新时,应用程序的内存使用量会跳多个(4-10)兆字节。这种情况持续了大约30分钟左右,直到应用程序在WebViewCoreThread中崩溃,并显示致命信号11错误,没有堆栈跟踪。

不断增加的内存(从大约15000kb开始):

enter image description here


当JavaScript未启用时,这些内存问题或错误都不会发生。

我在每次刷新之前都会清除缓存(clearCache(true))和释放内存(freeMemory()),以及清除其他数据库和缓存。

我还尝试在每次刷新后销毁WebView并创建全新的WebView,但仍然无济于事。

我可以通过创建一个基于处理程序控制时间的Webview来轻松重现此问题。这似乎应该是一个普遍存在的问题,但我找不到任何相关主题。难道是我的设备的问题吗?

提前感谢您的帮助,如有需要,我很乐意添加更多信息!

1个回答

0

尝试添加这个:

  //Injects the supplied Java object into this WebView. The object is injected into the 
    //JavaScript context of the main frame, using the supplied name. This allows the 
    //Java object's public methods to be accessed from JavaScript.
    WebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

1
明天我在我的开发电脑上试一下。不过有一个问题,让当前活动的方法可用于Javascript如何释放内存?因为似乎Javascript占用了内存。 - YeomansIII
1
经过测试,这似乎没有实际作用...不过还是谢谢您的帮助。 - YeomansIII
你搞定了吗? - Itzik Gili
哇嗨,我们最终在其他设备上进行了测试,有些设备出现了问题,而另一些则没有。我们最终选择了一个没有出现内存泄漏的设备。 - YeomansIII

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接