Wook No.1
[에러] Fatal Exception: java.lang.IllegalStateException Can not perform this action after onSaveInstanceState 본문
Android
[에러] Fatal Exception: java.lang.IllegalStateException Can not perform this action after onSaveInstanceState
Wook No.1 2022. 7. 4. 13:48Fragment 전환 시 Exception 원인
Fatal Exception: java.lang.IllegalStateException
Can not perform this action after onSaveInstanceState
onSaveInstanceState 함수가 호출된 상태에서 Fragment commit 함수를 호출 했을 때 발생 하는데 onSaveInstanceState는 Activity 에게 현재 상태를 Bundle 형태로 저장 시킬수 있는 함수다.
onSaveInstanceState 함수가 호출된 이후에 Fragment 전환이 발생한다면, onSaveInstanceState 함수를 통해 결정되는 복구 시점과 다르기에 해당 FragmentTransaction에 대해서는 복구할 수 없게 된다.
만약 이런 상황이 발생한다면 사용자 경험(UX)을 해치는 결과를 초래하고, 안드로이드는 이를 방지하고자 IllegalStateException을 발생시킨다.
해결 방안
1. 비동기 처리할때는 Transaction commit을 하지 않도록 한다. 그리고 Activity 상태를 저장하는 onSaveInstanceState 함수가 호출되기 전이 보장되는 곳에서 commit을 수행한다.
2. Transaction의 commit 대신 commitAllowingStateLoss 함수를 사용
(복구 시점에서 상태 손실이 발생하더라도 괜찮을 때 사용하면 되지만 권장하는 방법은 아니다)
supportFragmentManager
.beginTransaction()
.replace(R.id.container, fragment)
.commitAllowingStateLoss()
혹시 DialogFragment.show를 사용 사용할때는 아래와 같이 수정하면 된다.
supportFragmentManager
.beginTransaction()
.add(dialogFragment, dialogFragment.tag)
.commitAllowingStateLoss()
'Android' 카테고리의 다른 글
안드로이드 12 PendingIntent 이슈 및 대응 (0) | 2022.09.06 |
---|---|
Firebase Remote Config 사용 (0) | 2022.07.22 |
Bitmap compress 할때 이미지 회전 이슈 (0) | 2022.06.27 |
[빌드에러] Could not create service of type FileAccessTimeJournal using GradleUserHomeScopeServices (0) | 2022.05.27 |
안드로이드 스튜디오 Gradle View 에서 Task 목록이 안보일때 (0) | 2022.05.24 |
Comments