Hoạt động chính của ứng dụng của tôi là Activity
có chứa Webview
để tải các trang web.Cách kiểm soát mức sử dụng bộ nhớ khi gọi nhiều WebView trong Android?
Tôi ghi đè phương thức shouldOverrideUrlLoading(WebView view, String url)
để thực hiện mọi yêu cầu URL gọi Intent
và tải trong một hoạt động tương tự mới có chứa WebView
.
Thực hiện điều này nhằm mang lại trải nghiệm tốt hơn khi nhấn phím BACK, sẽ chỉ hoàn thành hoạt động hiện tại và quay lại hoạt động trước, không cần thời gian để hiển thị lại trang so với sử dụng goBack() trong chế độ xem web đơn.
Nhưng bây giờ vấn đề là, sau khi tôi mở nhiều URL, tạo hàng đợi hoạt động dài trong nền, bộ nhớ mà nó sử dụng trở nên lớn.
Khi tôi quay lại trình khởi chạy và kiểm tra tiến trình, tôi có thể thấy ứng dụng của mình lưu trữ hơn 200 triệu dữ liệu. Điều này là không thể chấp nhận được ...
Điều thú vị là tôi có thể thấy ứng dụng của mình đã sử dụng hết bộ nhớ, nhưng trong chế độ xem Heap của DDMS trong Eclipse, tôi có thể thấy ứng dụng được cấp không quá 10M bộ nhớ. Vì vậy, tôi đoán 200M là webStorage
được lưu trong bộ nhớ cache bởi Webview
?
Có cách nào để kiểm soát bộ nhớ không?
Tôi đang xem xét chỉ lưu có thể 5 lớp hoạt động cùng một lúc và khi quay lại 5 lần, chỉ cần quay lại trang chủ. Nhưng vẫn không biết cách giải phóng bộ nhớ bên cạnh 5 hoạt động tôi cần, thứ mà tôi sẽ không bao giờ sử dụng nữa?
Hoặc nếu đó là vì WebView
tự động lưu trang web được lưu vào bộ nhớ cache, làm cách nào tôi có thể quản lý thủ công này? Chẳng hạn như đặt giới hạn kích thước bộ nhớ cache tối đa hoặc số lượng trang?
Đối với tôi đây là giải pháp tàn bạo để đạt được tốc độ ... Ghi đè cách nút quay lại hoạt động và chuyển sang hoạt động khác với trang cho tôi không thực sự là giải pháp. Bạn nên thử và tối ưu hóa trang để tải nhanh hơn, nhưng bằng cách sử dụng hình ảnh nén, hình ảnh nén, vv Có thể có một số phương pháp và cài đặt khác của WebView mà bạn có thể gọi để thử và tăng tốc mọi thứ. –