私はOnGlobalLayoutListener
を使用してビューの変更をレイアウトするのに聞いている:ViewTreeObserverリスナーを削除できないとメモリリークが発生する可能性がありますか?
view.getViewTreeObserver().addOnGlobalLayoutListener(myListener);
私がいる限りビューは、私がremoveOnGlobalLayoutListener(myListener)
を呼び出す必要を見ない存在として、このリスナーのイベントに興味がありますので。
これはメモリリークを引き起こす可能性がありますか、またはリスナーガベージがビューと共に収集される可能性がありますか?リスナーがビューへの参照を保持しているとします。
backgoundは、特定のビューにアタッチできるモジュールを作成し、レイアウトの変更に基づいて処理するモジュールです。取り除く必要がない場合、作成はnew FancyModule(theView)
と同じくらい単純なので、コンストラクターはリスナーのバインドを処理します。削除が必要な場合は、私が避けたいデストラクタメソッドを実装する必要があります。
リスナーとビューは、相互に循環参照のみを保持します。他のコンポーネントは関与していません。ビューの 'getViewTreeObserver()'がビュー自体よりも長く生きているオブジェクトを返す可能性があるかどうかはわかりませんでした。 – McFarlane
それ以外のものが外部から基準サイクルを保持していなければ、それは問題ありません。 – Tomik