2

リスナーを保存して通知する最良の方法 (弱い参照と強い参照、匿名リスナーとガベージ コレクター) を探しているときに、Google がリスナーをどのように実装しているかを調べました。FragmentManager クラスからの次のコード コード:

ArrayList<OnBackStackChangedListener> mBackStackChangeListeners;

public void removeOnBackStackChangedListener(OnBackStackChangedListener listener) {
    if (mBackStackChangeListeners != null) {
        mBackStackChangeListeners.remove(listener);
    }
}

void reportBackStackChanged() {
    if (mBackStackChangeListeners != null) {
        for (int i=0; i<mBackStackChangeListeners.size(); i++) {
           mBackStackChangeListeners.get(i).onBackStackChanged();
        }
    }
}

にリスナーが削除されている場合はonBackStackChanged、次のようになります。

@Override
void onBackStackChanged()
{
    mFragmentManager.removeOnBackStackChangedListener(this);
}

ArrayList の次のリスナーはスキップされるようです。

何か不足していますか?これはやってはいけないことなのでしょうか?

4

0 に答える 0