Drawable
намного шире, чем Bitmap
. Drawable
предназначен для представления всего, что графическая система может отобразить на дисплее. Существуют подклассы Drawable
, такие как ShapeDrawable
или ColorDrawable
, которые не содержат Bitmap
и, следовательно, не нуждаются в каком-либо ручном управлении памятью.
BitmapDrawable
оборачивает Bitmap
и содержит ссылку на Bitmap
. Bitmap
особенный, потому что Android хранит пиксельные данные для всех Bitmaps
в отдельной куче, которая управляется отдельно от остальной части вашего приложения. Когда сборщик мусора Android очищает объект Bitmap
, он также очищает пиксельные данные из растровой кучи. Но вы можете заставить это произойти раньше, вручную вызвав recycle()
на Bitmap
, что помечает Bitmap
как недействительное и освобождает его пиксельные данные.
Android выделяет растровую кучу фиксированного размера для каждого работающего приложения, и ваше приложение может исчерпать свою кучу, оставив одновременно слишком много Bitmap
. Вот почему, если ваше приложение широко использует растровые изображения, вы, вероятно, выиграете от повторного использования растровых изображений, как только узнаете, что они вам не понадобятся.
Обновление: как отмечено в комментариях, отдельная куча растровых изображений применяется к версиям Android до Honeycomb. Что касается Honeycomb, куча растровых изображений была объединена с кучей приложений. Вот сообщение SO с дополнительной информацией.
person
mportuesisf
schedule
06.08.2012