Fragment内存回收后的恢复

1.只要在onSaveInstanceState中通过FragmentManager.putFragment将Fragment保存在savedInstanceState中,则当恢复界面的时候,通过FragmentManager.getFragment获取到的Fragment与系统自动恢复并显示的Fragment是同一个地址,即与getVisibleFragment()获取到的是同一个地址的Fragment

public Fragment getVisibleFragment(){
    List fragments = fragmentManager.getFragments();
    for(Fragment fragment : fragments){
        if(fragment != null && fragment.isVisible())
            return fragment;
    }
    return null;
}

2.将Fragment通过FragmentManager.putFragment保存的时候,最好判断当前要保存的Fragment对象是否在已被销毁,即是否在FragmentManager中,否则会报错

if (fragment != null && fragmentManager.getFragments().contains(fragment)){
    fragmentManager.putFragment(outState, getResources().getString(R.string.tag), fragment);
}

3.Fragment中的ViewPager中再嵌套Fragment时,内存回收再恢复时生命周期的情况:父Fragment onAttach -> ViewPager中的Fragment onAttach -> onCreate -> 父Fragment onCreate -> onCreateView -> onActivityCreated -> ViewPager中的Fragment onCreateView -> onActivityCreated

正常情况下,生命周期为:父Fragment onAttach -> onCreate -> onCreateView -> onActivityCreated -> ViewPager中的Fragment onAttach -> onCreate -> onCreateView -> onActivityCreated

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注