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