在寻找存储和通知侦听器的最佳方式(弱引用与强引用,匿名侦听器与垃圾收集器)时,我看了一下 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 中的下一个侦听器将被跳过。
我错过了什么吗?这是不应该做的事情吗?