startActivityForResult() 및 ActivityResultLauncher 이해
개발중에 MainActivity를 다시 호출되면서 onNewIntent에서 처리해야할 작업이 있었는데 제대로 호출이 되지 않는 상황이 발생하였습니다!
startActivityForResult() 및 ActivityResultLauncher에 대해 이야기하려고 합니다.
startActivityForResult와 onNewIntent
안드로이드 앱을 개발하다보면 다른 액티비티를 실행하고 해당 액티비티로부터 결과를 받아야 하는 경우가 있습니다.
이 때 우리는 주로 startActivityForResult() 메서드를 사용합니다.
이 메서드를 사용하면 호출한 액티비티가 실행 중인 동안 다른 액티비티를 실행하고, 그 결과를 받아 처리할 수 있습니다.
하지만 많은 개발자들이 혼란스러워하는 부분 중 하나는 startActivityForResult()와 onNewIntent()의 관계입니다.
startActivityForResult()를 사용하여 다른 액티비티를 시작할 때, 호출한 액티비티의 onNewIntent() 메서드는 호출되지 않습니다. onNewIntent() 메서드는 호출된 액티비티가 이미 실행 중이고, 새로운 인텐트가 전달될 때 호출됩니다.
그러나 startActivityForResult()를 사용하여 다른 액티비티를 시작하는 경우에는 새로운 인텐트가 전달되는 것이 아니기 때문에 onNewIntent()가 호출되지 않습니다.
새로운 인텐트가 전달되는 것이 아니기 때문
startActivityForResult()나 ActivityResultLauncher를 사용하여 다른 액티비티를 시작하는 경우, 호출된 액티비티의 실행 중에는 이미 현재의 인텐트를 가지고 있습니다.
따라서 이 경우에는 새로운 인텐트가 전달되는 것이 아니라 기존의 실행 중인 액티비티에 대한 인텐트를 그대로 유지하면서 다른 액티비티를 시작합니다.
ActivityResultLauncher
ActivityResultLauncher는 startActivityForResult() 메서드의 대안으로 도입되었습니다.
이것은 Jetpack 라이브러리에서 제공되는 기능으로, 액티비티나 프래그먼트 간에 안전하게 결과를 주고 받을 수 있도록 도와줍니다.
그러나 ActivityResultLauncher를 사용하여 다른 액티비티를 시작할 때에도 호출한 액티비티의 onNewIntent() 메서드는 호출되지 않습니다.
ActivityResultLauncher는 결과 처리를 위한 용도로만 사용되며, 호출한 액티비티의 생명주기에 직접적인 영향을 주지 않습니다.
결론
startActivityForResult()나 ActivityResultLauncher를 사용하여 다른 액티비티를 시작할 때는 호출한 액티비티의 onNewIntent() 메서드가 호출되지 않습니다.
이 둘은 서로 다른 개념이며, 서로 다른 용도로 사용됩니다.
'안드로이드' 카테고리의 다른 글
[Android] WorkManager (0) | 2024.03.18 |
---|---|
푸시 알림 처리를 위한 PendingIntent 및 onNewIntent 사용하기 (0) | 2024.03.14 |
SingleLiveEvent에 대해 알아보자 (사용법) (2) | 2024.02.14 |
안드로이드 layout xml @+id와 @id의 의미 (0) | 2024.02.07 |
Firebase FCM 기존 HTTP에서 HTTP v1로 마이그레이션 (0) | 2024.01.29 |