Hết bộ nhớ trong ứng dụng android là rất phổ biến nếu chúng ta không xử lý bitmap đúng cách, Giải pháp cho vấn đề sẽ là
if(imageBitmap != null) {
imageBitmap.recycle();
imageBitmap = null;
}
System.gc();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 3;
imageBitmap = BitmapFactory.decodeFile(URI, options);
Bitmap scaledBitmap = Bitmap.createScaledBitmap(imageBitmap, 200, 200, true);
imageView.setImageBitmap(scaledBitmap);
Trong đoạn mã trên, Bạn vừa thử tái chế bitmap sẽ cho phép bạn giải phóng không gian bộ nhớ đã sử dụng, vì vậy việc hết bộ nhớ có thể không xảy ra. Tôi đã thử nó hiệu quả với tôi.
Nếu vẫn gặp sự cố, bạn cũng có thể thêm những dòng này
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16*1024];
options.inPurgeable = true;
để biết thêm thông tin, hãy xem liên kết này
https://web.archive.org/web/20140514092802/http://voices.yahoo.com/android-virtual-machine-vm-out-memory-error-7342266.html?cat=59
LƯU Ý: Do "tạm dừng" tạm thời do thực hiện gc, bạn không nên thực hiện việc này trước mỗi lần phân bổ bitmap.
Thiết kế tối ưu là:
Giải phóng tất cả các ảnh bitmap không còn cần thiết , bằng if / recycle / null
mã hiển thị. (Đưa ra một phương pháp để trợ giúp điều đó.)
System.gc();
Phân bổ các bitmap mới.