リスナーを保存して通知する最良の方法 (弱い参照と強い参照、匿名リスナーとガベージ コレクター) を探しているときに、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 の次のリスナーはスキップされるようです。
何か不足していますか?これはやってはいけないことなのでしょうか?