我应该删除onDestroyView中的OnClickListener吗?

geo*_*eci 1 android android-lifecycle android-fragments android-memory butterknife

我为我的按钮设置了监听器:

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

如果我使用ButterKnife,建议打电话给ButterKnife.unbind(this)onDestroyView(){..}.我是否需要删除侦听器以避免内存泄漏?

void onDestroyView() {
    ...
    btn.setOnClickListener(null)
}
Run Code Online (Sandbox Code Playgroud)

net*_*ein 5

这取决于...

您是否有纵向和横向的不同布局,并且您已将其配置为在旋转时仅视图被销毁?

如果,则为YES以防止在已使用的活动/片段上引用未使用的视图(这可能会阻止它成为GC)

如果当你旋转视图和片段/活动被破坏,那么NO你不需要做,GC将照顾它.

存在这种差异的原因是Android在其GC上使用Mark-Sweep算法,这将防止收集2个未使用的对象(循环引用)的情况......但不是使用对象的情况引用了一个未使用的引用.


关于此的一些有用的问答: