我正在开发一个包含 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());
}
});
有没有办法检测内存即将耗尽,以便我可以优雅地处理它而不会导致应用崩溃?
onTrimMemory()
是根据整体生命周期事件和可用系统RAM的数量进行调用的。您的问题似乎与某种进程限制(例如,标准应用程序堆限制)有关,我不会期望在这种情况下调用onTrimMemory()
。 - CommonsWare