Activity異常破棄後、fragmentが重複する問題

1669 ワード

1.原因分析:


Activityは長期にわたってバックグラウンドにあり,システムはリソース不足のためactivityが破棄され,fragment状態がキャッシュされた.再びactivityに入ったので、再び歩きました
onCreateメソッドにより、fragmentが再加入し、fragmentが重複する

2.解決方法:


(1).Tagで以前保存したデータから直接読み出します
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mFragmentManager = getSupportFragmentManager();
        if (savedInstanceState != null) {
            homeFragment =(HomeFragment)mFragmentManager.findFragmentByTag(fragmentTag[0]);
            twoFragment = (TwoFragment) mFragmentManager.findFragmentByTag(fragmentTag[1]);
            myFragment = (MyFragment) mFragmentManager.findFragmentByTag(fragmentTag[2]);
        }
    }

 
(2).新規fragmentの削除
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mFragmentManager = getSupportFragmentManager();
        if (mFragmentManager.getFragments().size() > 0) {
            FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
            Iterator iterator = mFragmentManager.getFragments().iterator();
            while (iterator.hasNext()) {
                fragmentTransaction.remove(iterator.next());
            }
            fragmentTransaction.commit();
        }
    }

(3).fragment状態を保存しない(試したことがない)
 @Override
    protected void onSaveInstanceState(Bundle outState) {
        //super.onSaveInstanceState(outState);
    }

参照先:https://blog.csdn.net/cui130/article/details/85378748