有关Glide源码中的RequestManagerRetriever类里面成员变量pendingRequestManagerFragments的作用
在Glide的with()方法中,分析源码时有在RequestManagerRetriever的getRequestManagerFragment()方法中有涉及这样一段代码
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
RequestManagerFragment getRequestManagerFragment(final android.app.FragmentManager fm) {
RequestManagerFragment current = (RequestManagerFragment) fm.findFragmentByTag(FRAGMENT_TAG);
if (current == null) {
current = pendingRequestManagerFragments.get(fm);
if (current == null) {
current = new RequestManagerFragment();
pendingRequestManagerFragments.put(fm, current);
fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();
handler.obtainMessage(ID_REMOVE_FRAGMENT_MANAGER, fm).sendToTarget();
}
}
return current;
}
我想问问有没有人知道,为什么先通过pendingRequestManagerFragments.put(fm, current);之后在fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();后又执行handler.obtainMessage(ID_REMOVE_FRAGMENT_MANAGER, fm).sendToTarget();将新new的RequestManagerFragment实例给移除
为什么不直接执行fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();或者直接移除RequestManagerFragment实例而不通过handler