内容
最近リリースしたアプリのFirebase Crashlyticsをみると IllegalStateException
が妙に増加していた。
メッセージをみると
XXXFragment not associated with a fragment manager
が書いてあるんだけど、
なんでこのタイミングで起こるの?という感じの箇所が多い。
onActivityResultがduplicatedになったのを修正した関係で発生しているのだろうか。
もぐら叩き的に都度対応するでもいいんだけど、ライブラリ側の問題な気も。
その他requiredContextやrequiredActivityでの not attached to activity
も多い。
事前にLifecycle.Stateをチェックしないといけないんじゃnullチェックしてた頃とあんまり変わらなくなっちゃうな。
原因と対応
特定の更新系のAPI呼び出しをFragmentの lifecycleScope.launch
で起動していたのが主な原因だったようだ。
lifecycleScope.launch
だとFragmentのライフサイクルスコープになるため、Fragment自体がdestroyされるまでライフサイクルが終わらない。
そこで、スコープを viewLifecycleOwner.lifecycleScope.launch
に変更することで、destroyViewが呼ばれるまでをライフサイクルとして
処理することでエラーが解消されるはず。