2011-02-16 4 views
1

Пройдя несколько статей о производительности, Невозможно получить это утверждение точно.Понимание утечки памяти в приложении для Android

«Когда Drawable присоединяется к мнению, вид устанавливаются в качестве обратного вызова на вытяжке»
SOLN: «Установка обратных вызовов хранимой вводимых коэффициента к нулю, когда активность будет уничтожена.»

Что это означает, например.

В моем приложении, я инициализировать IMAGEBUTTON в OnCreate(), как это,

imgButton= (ImageButton) findViewById(R.id.imagebtn); 

На более позднем этапе, я получаю изображение из URL, получить поток и преобразовать его в вытяжке, и установить изображение БТН, как это,

imgButton.setImageDrawable(drawable); 

в соответствии с вышеуказанным заявлением, когда я выходе из моего приложения, скажем, в OnDestroy() я должен установить функции обратного вызова, хранящуюся, чтобы вводимого коэффициента нулю, не в состоянии понять эту часть! В этом простом случае, что я должен установить как null?

Я использую Android 2.2 Froyo, требуется ли эта техника или нет.

ответ

4

Вам придется делать это только в том случае, если вы сохранили шаблон как статическое поле где-то или в кеше какого-то типа. В этой конкретной ситуации нет причин устанавливать обратный вызов на нуль.

+0

Спасибо Romain Guy !! Я получил подсказку с вашей статьи. Я асинхронно загружаю свои изображения. Из интерфейса я получаю, как и вводимый коэффициент aLoader.loadDrawable (ImageUrl, новый getImageDrawable() { \t \t \t общественного недействительного imageLoaded (Drawable вытяжки, String ImageUrl) { \t \t \t \t \t \t imgBtn.setImageDrawable (вытяжка) ; \t \t} }); здесь, так как я получаю доступный как звонок по значению, будет ли он рассматриваться как кеширование!? – sat

+0

Если у вас нет статической ссылки на aLoader и вы не храните загруженные изображения внутри нее, у вас нет проблемы с утечкой. – dstefanox

+0

@ dstefanox - Спасибо за разъяснение – sat

2

Вот именно то, что было в примере вы цитируется:

  1. ориентации телефона был изменен, и это должно означать, что старая деятельность должна быть «сбрасывали» и новый созданный
  2. Если у вас есть хранимую ссылку на растровое изображение как статическое поле, она ссылается на старую активность, которая должна была быть сброшена (drawable имеет ссылку на TextView, представление имеет ссылку на активность)
  3. Создана новая активность, но в вашей выталкиваемой ссылке есть ссылка на старый, поэтому старый нельзя сбрасывать.

Конечно, все это правильно, если вы храните Drawable как статические, как в цитированном примере:

private static Drawable sBackground; 
Смежные вопросы