他們的區(qū)別:查看ViewPager切換頁面的源碼destroyItem方法
1.FragmentPagerAdapter
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object
+ " v=" + ((Fragment)object).getView());
mCurTransaction.detach((Fragment)object);
}
2.FragmentStatePagerAdapter
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Fragment fragment = (Fragment) object;
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
+ " v=" + ((Fragment)object).getView());
while (mSavedState.size() <= position) {
mSavedState.add(null);
}
mSavedState.set(position, fragment.isAdded()
? mFragmentManager.saveFragmentInstanceState(fragment) : null);
mFragments.set(position, null);
mCurTransaction.remove(fragment);
}
FragmentPagerAdapter:Transaction.detach(fragment):fragment與activity視圖分離
FragmentStatePagerAdapter:Transaction.remove(fragment):回收切換的fragment(回收內(nèi)存)嘲碱,減少內(nèi)存消耗框沟。
最后得出結(jié)論:如果頁面比較少可以用FragmentPagerAdapter旗芬,如果頁面比較多考慮內(nèi)存消耗就用FragmentStatePagerAdapter