2011-10-19 25 views
7

Tôi đang sử dụng createBitmap() ở nhiều nơi. Một số lần api này đang ném OutOfMemoryError() ngoại lệ. Làm thế nào để tránh ngoại lệ này?Cách tránh sự cố createBitmap() trong android

Tôi đang sử dụng như dưới đây,

createBitamp(width, height, Config.ARGB_8888); 

width = width của màn hình

height = height của màn hình

Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

đọc bài đăng trên blog này http://codingaffairs.blogspot.com/2016/07/processing-bitmap-and-memory-management.html –

Trả lời

5

Nhiều người phải đối mặt với vấn đề này. Bạn có ba cách để giải quyết vấn proble:

  • Tăng bộ nhớ có sẵn: Dịch vụ dừng lại, hoặc thay đổi điện thoại với một bộ nhớ sử dụng một
  • Giảm mới hơn: thông qua việc tối ưu hóa mã của bạn
  • [UPDATE] Dọn dẹp không sử dụng Bộ nhớ của bitmap: gọi recycle().
  • [UPDATE] Không sử dụng chỗ chứa rác :)

Thông thường với các vấn đề Bitmap, thu gom rác sẽ giúp.

Phản hồi của Justin Breitfeller links để giải thích chi tiết hơn về các hoạt động bên trong của Bitmap. Thông báo để lấy đi là bộ nhớ được cấp phát cho dữ liệu bitmap (trong phương thức createBitmap nguyên gốc) được xử lý một phần tách biệt, và không được giải phóng trực tiếp bởi GarbageCollector khi Bitmap trở thành rác thu thập được. Giải pháp thực sự là tái chế() các bitmap của bạn khi không sử dụng chúng. Điều này sẽ vẫn giữ bộ nhớ (nhỏ) được cấp phát cho đối tượng Bitmap, nhưng đánh dấu bộ nhớ (lớn) được cấp phát cho dữ liệu bitmap thu thập được. Do đó GarbageCollector lần lượt sẽ giải phóng cả hai, nhưng bạn không phải gọi nó bằng tay, trước khi một OutOfMemory xảy ra, JVM sẽ cố gắng để GarbageCollect anyways.

+0

System.gc() dường như hoạt động tốt nhất cho tôi! Cảm ơn!! –

Các vấn đề liên quan