java - Android WebView - JavaScript 内存泄漏

标签 java javascript android memory-leaks android-webview

我在 WebView 中遇到 Javascript 问题(使用 webview.getSettings().setJavascriptEnabled(true); 启用)嵌入 Javascript 的 HTML 页面加载并正确显示,但是,我也在做的是不断刷新屏幕每 10 或 30 秒。当我进入我的测试设备(MK808 迷你电视)的外壳时,我使用“dumpsys meminfo”来查看进程的内存。每 5 秒显示一次我的应用程序进程的内存,我可以看到每当页面刷新时,应用程序的内存使用量都会跳跃数 (4-10) 兆字节。这将持续大约 30 分钟左右,直到应用程序崩溃并在 WebViewCoreThread 中出现致命信号 11 错误,并且没有堆栈跟踪。

不断增加内存(从 15000kb 左右开始):

enter image description here


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

每次刷新之前,我都会清除缓存 (true) 和 freeMemory(),以及所有其他数据库和缓存。

我也曾尝试在每次刷新后销毁 WebView 并创建一个全新的,但无济于事。

我可以通过创建一个新的应用程序项目并创建一个基于控制时间的处理程序重新加载的 webview 来轻松地重做这个问题。这似乎应该是一个普遍存在的问题,但我找不到关于这个主题的任何内容。会不会是我的设备?

在此先感谢您的帮助,我很乐意根据需要添加更多信息!

最佳答案

尝试添加这个:

  //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");

关于java - Android WebView - JavaScript 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17352757/

相关文章:

javascript - 如何从 javascript 中的字符串中删除包含内容的 HTML 标记(不是特定标记)

java - 如何将数据库服务器的更新反射(reflect)到网站和Android应用程序(即时)?

java - Windows 10 中未返回默认打印机

java - CompactDecimalFormat 能否以某种方式用于格式化货币值?

java - 使用 perl/java 将数据库中现有的图像代码重命名为新图像代码

java - JComboBox 类型不是通用的;它不能用参数 <Object> 参数化

JavaScript 错误

php - 使用 jQuery .toggleClass 的可选图像或使用 php/css 作为复选框的图像,大多数用户可以使用哪种方法?

android - 找不到 Gradle DSL 方法 : 'androidTestImplementation()'

android - 从 Assets 文件夹解析 Json 文件时出现 NullPointerException