1

Я поставил слушателя для моей кнопки:Должен ли я удалять OnClickListener в onDestroyView?

View onCreateView(...) { 
    ... 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //some work 
     } 
    }); 
    ... 
} 

Если я использую нож для масла, рекомендуется вызвать ButterKnife.unbind(this) в onDestroyView(){..}. Нужно ли мне удалять слушателей, чтобы избежать утечки памяти?

void onDestroyView() { 
    ... 
    btn.setOnClickListener(null) 
} 
+1

Если вы используете 'ButterKnife' то почему вы используете этот способ для установки 'onClickListener'? Вы должны использовать аннотацию '@OnClick (R.id.myBtn). – Rohit5k2

+0

Я знаю это. Я просто решил проверить это дело. – georgeci

ответ

5

Это зависит ...

У вас есть различные макеты для портрета и пейзажа, и вы его настроить так, что при вращении только вид разрушается?

Если да, то ДА предотвратить упоминание о неиспользованном взгляде на использованную активности/Fragment (которые могли бы предотвратить его от GC)

Если при вращать вид и фрагмент/активность уничтожается, то NO Вам не нужно это делать, GC позаботится об этом.

Эта разница существует из-за того, что Android использует алгоритм Mark-Sweep на своем GC, который предотвратит случаи, когда 2 неиспользуемых объекта со ссылками друг на друга (круговые ссылки) собираются ... но нет случаи, когда используемый объект имеет ссылку на неиспользованный.


Некоторые полезные Q & об этом: