检测WebView内部的可用内存

检测WebView内部的可用内存

本文介绍了检测WebView内部的可用内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



有时候,所需内存的数量超过了JavaScript可能需要的数量,并且崩溃了Chromium进程在我的应用程序中监听 onMemoryTrim - 但在此场景中永远不会调用它

在具有超过1GB内存的设备上。 (甚至没有 TRIM_MEMORY_RUNNING_LOW )。

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

我试过轮询 performance.memory ,但没有奏效。下面的脚本会在WebView中执行时崩溃:

  var a = []; 

var kek =()=> {
var b = []; (var i = 0; i
return b;
}

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

是否有任何方法可以检测内存即将耗尽,所以我可以在没有应用程序的情况下正常处理它崩溃?

解决方案

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

You can however catch out of memory crashes in Android 8.0+ using the new termination handle API. So this works around my problem by not having to check the available memory required in the first place.

By overriding onRenderProcessGone - we get to catch the bug and recreate the WebView.

这篇关于检测WebView内部的可用内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 07:29