Tôi là người mới đối với tất cả chủ đề quản lý bộ nhớ, vì vậy có rất nhiều điều tôi không hiểu.
Tôi đang cố gắng để cache một hình ảnh trong ứng dụng của tôi, nhưng tôi đang gặp rắc rối với tiêu thụ bộ nhớ của nó:Android - Bộ nhớ cache bitmap chiếm rất nhiều bộ nhớ
Tất cả các mã Bitmap Chaching là khá nhiều sao chép dán từ đây: http://developer.android.com/training/displaying-bitmaps/index.html
tôi sửa lỗi mã và kiểm tra kích thước heap trong giao diện DDMS trong nhật thực, và có khoảng 15mb nhảy sau những dòng mã:
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
trong phương pháp "decodeSampledBitmapFromResource".
Hình ảnh có kích thước 1024x800, 75kb tệp jpg. Theo những gì tôi đã thấy trên internet, dung lượng bộ nhớ mà hình ảnh này phải chụp là khoảng 1024 * 800 * 4 (Bytes trên mỗi pixel) = 3.125mb
Tất cả các chủ đề liên quan đến chủ đề này don ' t nói lý do tại sao nó lấy bộ nhớ nhiều hơn nó nên. Có cách nào để lưu trữ một hình ảnh với một lượng bộ nhớ hợp lý không?
EDIT
tôi đã cố gắng sử dụng phương pháp decodeFile gợi ý trên @ ArshadParwez của câu trả lời dưới đây. Sử dụng phương pháp này, sau khi phương thức BitmapFactory.decodeStream bộ nhớ được tăng lên chỉ 3,5MB - giải quyết vấn đề, loại, nhưng tôi muốn cache bitmap trực tiếp từ tài nguyên.
Tôi nhận thấy rằng trong phương thức decodeResource có 2 bộ nhớ "nhảy" - một trong khoảng 3,5mb - đó là hợp lý và một số lạ khác là 14mb. 14mb được sử dụng cho cái gì và tại sao điều này lại xảy ra?
Làm cách nào để lưu bộ nhớ đệm vào hệ thống tệp thay vì bộ nhớ hoạt động? –
@PaulNikonowicz ngay cả khi nó giải quyết được vấn đề, có thể giả định rằng bộ nhớ thứ cấp là flash hoặc loại tương tự, viết thường xuyên với nó sẽ làm giảm thời gian sống của nó, những gì không phải là trường hợp cho bộ nhớ chính. –
4 byte dành cho ARGB4444. Bạn có chắc chắn nó không phải là argb8888? – gunar