本文介绍了检测WebView内部的可用内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在构建一个包含运行JavaScript代码的 WebView
的应用程序。 JavaScript代码的分配量非常大,并且可能需要大量内存。
有时候,所需内存的数量超过了JavaScript可能需要的数量,并且崩溃了Chromium进程在我的应用程序中监听 onMemoryTrim
- 但在此场景中永远不会调用它
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内部的可用内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!