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