3

以下は、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);
        }
    }

}
4

1 に答える 1