Жесткое преимущество над растровым изображением для памяти в Android

Этот вопрос связан с ответами по следующему вопросу:

Ошибка удаления растровых изображений [Android]

Есть ли какое-либо преимущество использования Drawable over Bitmap в Android с точки зрения де-распределения памяти?

Я смотрел на "Полки" Ромена Гая, и он использует SoftReference для кэшей изображений, но я не могу найти, где находится код, который де-выделяет эти Drawables, когда SoftReference автоматически восстанавливает память для Bitmap. Насколько я знаю .recycle() должен быть явно вызван в Bitmap, чтобы он был выделен.

Ответ 1

В моем понимании, битмапы, как правило, лучше для производительности, если вам не нужно много манипулировать изображениями. Однако, когда я не вручную их перерабатываю, я столкнулся с утечками памяти. Моим решением было написать класс, чтобы помочь мне управлять своими изображениями, что обеспечивает простой способ переработать все мои растровые изображения в определенных точках моего приложения. Он также предоставляет простой способ повторно использовать уже загруженные ресурсы (включая Drawables).

Ответ 2

Вам не нужно вызывать Bitmap.reycle(). Это будет сделано для вас в финализаторе. Выполнение этого в финализаторе означает, что выделение будет отложено до запуска финализаторов, поэтому, когда возможно, прямой вызов recycle() может помочь в управлении памятью.

Ответ 3

Acc. эта страница, начиная с уровня API 11, данные пикселя Bitmap хранятся в куче Dalvik вместе с соответствующим растровым изображением. Таким образом, вызов .recycle на самом деле не требуется, если вы не хотите восстановить память вручную для дальнейшего использования. Обязательно удалите ссылку на растровое изображение, также как добавленную меру.

PS: Это была ссылка, в которой объясняется hackbod.