最近项目开发当中 经常使用ViewPager结合fragment构建页面框架 遇到FragmentPagerAdapter和FragmentStatePagerAdapter,到底在哪种情况下使用哪一个呢?
前者适用于页面较少的情况,后者适用于页面较多的情况
查看FragmentPagerAdapter中 destroyItem方法源码:
public void destroyItem(ViewGroup container, int position, Object object) { if (this.mCurTransaction == null) { this.mCurTransaction = this.mFragmentManager.beginTransaction(); } this.mCurTransaction.detach((Fragment)object); }
FragmentStatePagerAdapter中 destroyItem()方法源码
@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, mFragmentManager.saveFragmentInstanceState(fragment)); mFragments.set(position, null); mCurTransaction.remove(fragment); }
通过源码了解,主要查看destroyItem方法中的最后一行,mcurtransaction.remove(fragment),通过这行代码了解到,FragmentStatePagerAdapter是真正释放fragment内存,在FragmentPagerAdapter的destroyItem方法中所调用的是mcurtransaction.detach(fragment),他仅仅是将fragment的页面与activity的页面抽离开来,并没有真正的销毁fragment释放内存.