Tôi đang tạo ứng dụng có chứa WebView
chạy một số mã JavaScript. Mã JavaScript đó khá phân bổ và có thể đòi hỏi nhiều bộ nhớ.Phát hiện bộ nhớ khả dụng bên trong WebView
Đôi khi, số lượng bộ nhớ bắt buộc vượt quá số lượng JavaScript có thể yêu cầu và làm hỏng quy trình Chromium của WebView làm treo ứng dụng của tôi.
Tôi nghe onMemoryTrim
trong đơn đăng ký của mình - nhưng không bao giờ được gọi trong trường hợp này trên các thiết bị có nhiều hơn 1GB bộ nhớ. (Không, ngay cả với TRIM_MEMORY_RUNNING_LOW
).
Có cách nào tôi có thể phát hiện WebView của mình sắp hết bộ nhớ và có thể giết nó hoặc cho nó biết (để nó có thể giải phóng bộ nhớ) không?
Tôi đã thử bỏ phiếu performance.memory
nhưng không hoạt động. Tập lệnh sau gặp sự cố WebView nếu được thực hiện trong đó:
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());
}
});
Có cách nào để phát hiện bộ nhớ sắp hết để tôi có thể xử lý nó một cách dễ dàng mà không cần ứng dụng gặp sự cố không?
'onTrimMemory()' được gọi dựa trên các sự kiện toàn bộ vòng đời và số lượng RAM * hệ thống miễn phí *. Vấn đề của bạn có vẻ như bị ràng buộc với một số loại giới hạn quy trình (ví dụ: giới hạn heap ứng dụng chuẩn) và tôi sẽ không mong đợi 'onTrimMemory()' được gọi cho các trường hợp như vậy. – CommonsWare
@CommonsWare cảm ơn, tôi đã không nhận ra đây là những móc được kích hoạt trên toàn hệ thống. Có vẻ như giới hạn JavaScript của Chrome là giới hạn có lỗi ở đây. Hoàn toàn thẳng thắn - điều này là do [Chrome leaks] (https://bugs.chromium.org/p/chromium/issues/detail?id=749482) và khi nó đạt đến một số giới hạn - nó bị treo (với ứng dụng của tôi). X của tôi trong vấn đề XY này là Chrome không bị rơi hoặc có cách để bắt nó trong ứng dụng của tôi và không làm hỏng nó - mặc dù tôi quan tâm đến cách đo lường mức sử dụng bộ nhớ từ một PoC hoàn toàn tò mò. –
@CommonsWare và rõ ràng 8,0 giới thiệu một cách để khôi phục từ X - https://developer.android.com/preview/features/managing-webview.html#termination-handle –