2010-12-31 37 views
11

Câu hỏi này được liên kết với các câu trả lời trong các câu dưới đây:lợi thế drawable trên bitmap cho bộ nhớ trong android

Error removing Bitmaps[Android]

Có lợi thế của việc sử dụng drawable trên Bitmap trong Android về bộ nhớ de-phân bổ ?

Tôi đang xem dự án Romain Guy Kệ và anh ấy sử dụng SoftReference để lưu trữ hình ảnh nhưng tôi không thể tìm kiếm mã mà không phân bổ các Drawables này khi SoftReference tự động khôi phục bộ nhớ cho Bitmap. Theo như tôi biết .recycle() phải được gọi một cách rõ ràng trên Bitmap để nó được phân bổ.

Trả lời

10

Theo hiểu biết của tôi, Bitmap thường tốt hơn cho hiệu suất nếu bạn không cần thực hiện nhiều thao tác hình ảnh. Tuy nhiên, tôi đã chạy vào rò rỉ bộ nhớ khi tôi không tự tái chế chúng. Giải pháp của tôi là write a class để giúp tôi quản lý hình ảnh của mình cung cấp cách dễ dàng để tái chế tất cả các bitmap của tôi tại một số điểm nhất định trong ứng dụng của tôi. Nó cũng cung cấp một cách dễ dàng để tái sử dụng các tài nguyên đã tải (bao gồm cả Drawables).

9

Bạn không cần gọi Bitmap.reycle(). Điều này sẽ được thực hiện cho bạn trong finalizer của nó. Làm nó trong finalizer có nghĩa là phân bổ sẽ bị trì hoãn cho đến khi finalizers chạy, vì vậy khi có thể gọi trực tiếp recycle() có thể giúp quản lý bộ nhớ.

+1

no .recycle() phải được gọi, tôi thấy chú thích tên miền romain ở đâu đó trên stackoverflow nói để làm điều đó như bitmap được phân bổ nguyên bản và nếu không được thực hiện nó là rò rỉ bộ nhớ – 2cupsOfTech

+8

Bạn có thể muốn kiểm tra người dùng hồ sơ trước khi bạn gọi cho họ sai. –

+3

@AustynMahoney Các chuyên gia cũng có thể sai. Đi theo lời khuyên của một chuyên gia nhưng không tôn giáo theo nó. "Kiểm tra hồ sơ người dùng" ít quan trọng hơn chứng minh. Không có bằng chứng hoặc liên kết nào được cung cấp từ bất kỳ ai. Dù sao câu trả lời hay từ hackbod. – user1132959

0

Acc. đến this page, bắt đầu từ API cấp 11, dữ liệu pixel Bitmap được lưu trữ trong Heap Dalvik cùng với Bitmap được liên kết. Vì vậy, gọi .recycle thực sự là không cần thiết, trừ khi bạn muốn đòi lại bộ nhớ bằng tay để sử dụng thêm. Hãy chắc chắn để de-tham khảo bitmap quá, chỉ là một biện pháp được thêm vào.

PS: Đây là liên kết giải thích câu trả lời của hackbod.

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