我应该删除 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 个未使用的对象相互引用(循环引用)从被收集...但不是使用过的对象引用未使用的对象的情况


一些有用的问答: