我应该删除 onDestroyView 中的 OnClickListener 吗?
Should I delete the OnClickListener in onDestroyView?
我为我的按钮设置了监听器:
View onCreateView(...) {
...
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//some work
}
});
...
}
如果我使用ButterKnife,建议在onDestroyView(){..}
中调用ButterKnife.unbind(this)
。我是否需要删除侦听器以避免内存泄漏?
void onDestroyView() {
...
btn.setOnClickListener(null)
}
这取决于...
纵向和横向是否有不同的布局,并且配置为仅在旋转时销毁视图?
如果是这样,YES 以防止在已用 Activity/Fragment 上引用未使用的视图(这可能会阻止它被 GC)
如果当你旋转视图时Fragment/Activity被销毁,那么NO你不需要这样做, GC 会处理它。
之所以存在这种差异,是因为 Android 在其 GC 上使用了 Mark-Sweep 算法,这将防止 2 个未使用的对象相互引用(循环引用)从被收集...但不是使用过的对象引用未使用的对象的情况。
一些有用的问答:
- Does setting Java objects to null do anything anymore?
- Android: Is there any advantage of settings references to null when an Activity is being destroyed?
- Technical details of Android Garbage Collector
- How does garbage collection work in Android 4.2 Jelly Bean Dalvik?
我为我的按钮设置了监听器:
View onCreateView(...) {
...
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//some work
}
});
...
}
如果我使用ButterKnife,建议在onDestroyView(){..}
中调用ButterKnife.unbind(this)
。我是否需要删除侦听器以避免内存泄漏?
void onDestroyView() {
...
btn.setOnClickListener(null)
}
这取决于...
纵向和横向是否有不同的布局,并且配置为仅在旋转时销毁视图?
如果是这样,YES 以防止在已用 Activity/Fragment 上引用未使用的视图(这可能会阻止它被 GC)
如果当你旋转视图时Fragment/Activity被销毁,那么NO你不需要这样做, GC 会处理它。
之所以存在这种差异,是因为 Android 在其 GC 上使用了 Mark-Sweep 算法,这将防止 2 个未使用的对象相互引用(循环引用)从被收集...但不是使用过的对象引用未使用的对象的情况。
一些有用的问答:
- Does setting Java objects to null do anything anymore?
- Android: Is there any advantage of settings references to null when an Activity is being destroyed?
- Technical details of Android Garbage Collector
- How does garbage collection work in Android 4.2 Jelly Bean Dalvik?