我需要在onDestroy期间释放View.OnClickListener吗?

4

我有一个包含数百个片段的大型项目,它们几乎都遵循我将要描述的模式,我的问题也将随之而来。

public class MyFragment extends Fragment implements View.OnClickListener {

    public void onDestroy(...) {
    }

    public void onCreateView(...) {
        ...
        root.findViewById(R.id.some_button).setOnClickListener(this);
        return root;
    }

    public void onClick(View v) { ... }
}

我需要在onDestroy中释放片段中的监听器吗?这是否会导致内存泄漏或引起任何问题?清理这些监听器是否被认为是一种良好的实践?如果可以的话,解释一下为什么。


1
目前有任何性能损失吗?为什么监听器会泄漏到其他内存中? - OneCricketeer
不,我主要担心未来的问题或后台应用程序的问题。我的合作伙伴告诉我发布这些监听器是一个好主意或好的做法,但我没有看到理由。 - J Blaz
1
我从未见过有关删除点击监听器的任何参考资料。确实,指向Activity的任何“片段交互监听器”都应该被删除,但这仅仅是因为Activity在onDestroy上被分离了。 - OneCricketeer
1个回答

5

不,你不需要在onDestroy事件中释放onClickListner。尽管片段是侦听器,但垃圾回收器足够聪明,甚至可以解决循环引用的问题。只要两者都有资格进行垃圾回收,就不会有问题。


你有任何支持这个的参考资料或证据吗?另外,我如何知道哪些内容适合进行垃圾回收? - J Blaz
你可以阅读这篇文章了解关于循环引用的声明,同时也可以通过在Android上使用内存分析器来验证。 - NameSpace
@JBlaz 我建议你阅读《Java编程思想》这本书。垃圾回收过程在书中有很好的解释。 - YTerle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接