Java VM автоматически позаботится о сборе нежелательных StateListDrawable
s. Все, что вам нужно сделать, - это убедиться, что из вашей программы нельзя ссылаться на саму StateListDrawable
, либо переназначая ссылки на другой Object
, либо устанавливая ссылки на null
. Даже не имеет значения, если StateListDrawable
по-прежнему содержит ссылки на другие объекты, которые вы действительно хотите сохранить (например, обратные вызовы, которые вы обсуждали) ... если на Object
нельзя ссылаться, он подходит для сборки мусора. Когда виртуальная машина считает, что пришло время освободить память, она позаботится об удалении StateListDrawable
s для вас, вам не нужно беспокоиться о том, чтобы вызывать recycle()
для любого из ваших объектов самостоятельно.
Простой способ убедиться в этом, если вы редактируете с помощью Eclipse, - это просмотреть сообщения LogCat во время работы вашей программы в эмуляторе. Иногда будут появляться сообщения о том, что «GC освободил объекты xxx / xxx в xxx мс».
Из учебников по Java :
"Некоторые объектно-ориентированные языки требуют, чтобы вы отслеживали все
объекты, которые вы создаете и которые вы явно уничтожаете их, когда они
больше не нужен. Платформа Java позволяет создавать как можно больше
объекты как вы хотите (ограниченные, конечно, тем, что ваша система может
обрабатывать), и вам не нужно беспокоиться об их уничтожении. Ява
среда выполнения удаляет объекты, когда определяет, что они
больше не используется. Этот процесс называется сборкой мусора.
Объект имеет право на сборку мусора, когда больше нет
ссылки на этот объект. Ссылки, которые хранятся в переменной
обычно удаляется, когда переменная выходит из области видимости. Или вы можете
явно удалить ссылку на объект, установив переменную в
специальное значение ноль. Помните, что программа может иметь несколько
ссылки на один и тот же объект; все ссылки на объект должны быть
отброшено до того, как объект будет разрешен для сборки мусора. "
Редактировать: из документации для 'Bitmap.recycle () `,
"Освободить собственный объект, связанный с этим растровым изображением, и очистить
ссылка на данные пикселя ... Это сложный вызов, и обычно
не нужно вызывать, так как нормальный процесс GC освободит это
памяти, когда больше нет ссылок на это растровое изображение. "