반응형

ActivityResultLauncher launch() 호출 시 IllegalStateException 가 발생하는 원인은?
안드로이드 Activity Result API를 쓰다 보면 가끔 위의 예외를 만나게 됩니다.
- registerForActivityResult()는 Lifecycle STARTED 이전에 등록해야 하고,
- ActivityResultLauncher.launch()는 Lifecycle STARTED 이상에서만 호출해야 합니다.
Activity Result API의 수명주기 계약:
- 등록(register) 은 Lifecycle이 STARTED가 되기 전(대개 onCreate)에 해야 함.
→ 그래야 시스템이 결과 콜백을 안전하게 재연결/복원 가능. - 실행(launch) 은 Lifecycle이 STARTED 이상일 때만 가능.
→ 아직 화면이 시작되지 않았는데 외부 Activity/Intent를 띄우면 결과 전달/상태복원에 문제가 생김.
그렇기에 ActivityResultLauncher.launch()를 onStart가 타기전인 onCreate에서 호출하게되면 오류가 발생하게 됩니다.
만일 onCreate에서 호출해야되는 경우에는?
ActivityResultLauncher.launch()는 Lifecycle이 STARTED 이상일때 호출하는게 좋겠지만
플로우상 어쩔 수 없이 onCreate에서 호출해야되는 경우가 있으실 듯 합니다.
그 경우에는 아래와 같이 실행하는 시점에 Lifecycle를 체크해주면 됩니다.
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
// 여기서 launch 실행
}
}
다만, onStart가 호출될때마다 해당 로직이 실행되기 때문에 중복을 막는 로직을 추가해주시면 됩니다.
반응형
'Android > error' 카테고리의 다른 글
| [Error] Android 8에서 투명 Activity의 orientation 설정 시 앱 강제 종료되는 현상 (0) | 2026.01.08 |
|---|---|
| [Error] Android 12 PendingIntent Flag 이슈 대응 (1) | 2024.11.20 |