以下は、Android ウィジェットの顧客リスナーを作成するために読んだプロトタイプ コードです。
私の質問は、親ビューがそれ自体を「FooListener」として登録し、親がFooWidgetへの参照を維持している場合、ウィジェットには親への参照があり、親にはおそらく参照があるため、メモリリークが作成されないのはなぜですかこのウィジェットに?
包含アクティビティは、2 つの子の間に循環参照がある場合でも、範囲外になると、何らかの形ですべての構成要素をシャットダウンしますか?
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);
}
}
}