• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

javascript - 检测 WebView 内的可用内存

[复制链接]
菜鸟教程小白 发表于 2022-9-14 14:17:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在构建一个包含 WebView 的应用程序运行一些 JavaScript 代码。该 JavaScript 代码分配量很大,可能需要大量内存。

有时,所需的内存量超过了 JavaScript 可能需要的量,并导致 WebView 的 Chromium 进程崩溃,从而导致我的应用程序崩溃。

我听onMemoryTrim在我的应用程序中 - 但在这种情况下,在内存超过 1GB 的设备上从未调用过它。 (甚至没有 TRIM_MEMORY_RUNNING_LOW )。

有什么方法可以检测到我的 WebView 内存不足并杀死它或让它知道(这样它就可以释放内存)?

我试过轮询performance.memory但它没有用。如果在其中执行以下脚本会使 WebView 崩溃:

var a = [];

var kek = () => {
  var b = [];
  for(var i = 0; i < 1024 * 1024 * 2; i++) b.push(Math.random());
  return b;
}

var ival = setInterval(() => {
  let m = performance.memory;
  if(m.jsHeapSizeLimit - m.usedJSHeapSize < 1e5) {
    console.log("Memory limited")
  } else {
    a.push(kek());
  }
});

有什么方法可以检测内存即将用完,这样我就可以优雅地处理它而不会导致应用程序崩溃?



Best Answer-推荐答案


我已经与 Chromium 团队和 Android 团队讨论过这个问题,目前(他们认为并且我相信他们)这是不可能的 .

Sometimes, the amount of required memory exceeds the amount JavaScript can require and crashes the Chromium process of the WebView which crashes my app.



但是,您可以使用 the new termination handle API 在 Android 8.0+ 中发现内存不足崩溃。 .因此,无需首先检查所需的可用内存,就可以解决我的问题。

通过覆盖 onRenderProcessGone - 我们会发现错误并重新创建 WebView。

关于javascript - 检测 WebView 内的可用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382757/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap