为什么不';Android中的t侦听器造成内存泄漏?

为什么不';Android中的t侦听器造成内存泄漏?,android,android-layout,Android,Android Layout,下面是我读到的为Android小部件创建客户监听器的原型代码。 我的问题是,如果父视图将自己注册为“傻瓜监听器”,并且父视图维护对FooWidget的引用,为什么不创建内存泄漏,因为小部件有对其父视图的引用,而父视图可能有对该小部件的引用 当包含活动超出范围时,即使两个子活动之间存在循环引用,它是否会以某种方式关闭其所有组成部分 public class FooWidget extends View implements OnClickListener { private FooEve

下面是我读到的为Android小部件创建客户监听器的原型代码。
我的问题是,如果父视图将自己注册为“傻瓜监听器”,并且父视图维护对FooWidget的引用,为什么不创建内存泄漏,因为小部件有对其父视图的引用,而父视图可能有对该小部件的引用

当包含活动超出范围时,即使两个子活动之间存在循环引用,它是否会以某种方式关闭其所有组成部分

public class FooWidget extends View implements OnClickListener {

    private FooEventListener listener;
    public Button fooButton;
    public FooWidget(Context context) {
        super(context);
        fooButton = (Button) findViewById(R.id.myFooButton);
        fooButton.setOnClickListener(this);
     }
    public abstract class FooEventListener {
        public abstract void onFoo(View v);
    }
    public void registerListener(FooEventListener listener) {
        this.listener=listener;
    }
    @Override
    public void onClick(View v) {
        if (listener!=null) {
            listener.onFoo(this);
        }
    }

}

首先,如果父级将自己注册为一个傻瓜监听器,这并不自动意味着它维护对FooWidget的引用。即使循环引用产生了内存泄漏,循环引用也不会产生内存泄漏。如果两个对象都无法从活动代码中访问,那么即使它们相互引用,它们也将被gc’ed