При попытке реализовать небольшой кеш-память в Drawables, я узнал, что, чтобы избежать утечек памяти после закрытия активности, мне нужно отпереть эти Drawables: установите для их обратного вызова значение null.
Поскольку для хранения Drawables, кэшированных в каждом действии, потребуется дополнительный код, я попытался отвязать их сразу после setImageDrawable(drawable)
, и я пока не вижу никаких последствий.
Это код из класса MyImageView (extends ImageView
):
setImageDrawable(drawable);
d.setCallback(null);
В отладчике я могу ясно видеть, что перед первым обратным вызовом первой строки, после первой строки он установлен на этот образView, а после этого я снова установил его в null. Обычно это отображается после этого.
Документация для setCallback (Drawable.Callback cb)
гласит:
Привязать объект Drawable.Callback к этому Drawable. Требуется для клиентов, которые хотят поддерживать анимированные чертежи.
Так как мне не нужен анимированный drawable, я не понимаю, почему я не должен этого делать, но меня беспокоит, что в нескольких блогах об утечке памяти в Android в отношении чертежей это делается только после того, как активность завершена. Вопрос в том, почему callback всегда автоматически устанавливается при привязке к ImageView
?
Есть ли какие-то граничные условия, когда эти чертежи с обратным вызовом равны нулю, вызовут проблему? Не отображается или NPE?