AndroidでFragmentをバックグラウンドとかでcommitするとエラーが出ちゃうよね
特によくあるのが非同期処理でDialogFragment.showするときかな
IllegalStateException: Can not perform this action after onSaveInstanceState
これを解決するためにとりあえずcommitをcommitAllowingStateLossにすることがあるよ
commitでもcommitAllowingStateLossでもsavedInstanceStateやargumentsを保持しようとするからほとんど違わないよ
じゃあ何が違うかというとcommitでは、
onSavedInstanceStateのあとにcommitするとエラーするよ。
commitAllowingStateLossだとエラーしないね。
なぜcommitだとエラーするのかというと、
状態損失によってcommitが失われてしまうかもしれないからだね
- アプリをバックグラウンドにする
- FragmentをcommitAllowingStateLoss(ここがcommitであればエラー)
- 画面回転(Activityを再構築して状態損失)
こうすると2でコミットしたフラグメントが表示されないよ
でも画面回転とかしなければ表示されるから、
とりあえず表示したいだけのダイアログだとcommitAllowingStateLossを使うことがあるね