Android/error

[Android] ActivityResultLauncher launch() 호출 시 IllegalStateException 원인과 해결방법

mins9273 2025. 10. 15. 14:07
반응형

 

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가 호출될때마다 해당 로직이 실행되기 때문에 중복을 막는 로직을 추가해주시면 됩니다.

반응형