在我阅读的原型代码下方,用于为 Android Widgets 创建客户侦听器。
我的问题是,如果父视图将自身注册为“FooListener”并且父视图维护对 FooWidget 的引用,为什么不创建内存泄漏,因为 Widget 具有对其父视图的引用,而父视图可能具有引用到这个小部件?
包含活动是否会在超出范围时以某种方式关闭其所有组成部分,即使它的两个孩子之间存在循环引用?
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);
}
}
}