안드로이드

startActivityForResult 및 ActivityResultLauncher에 대한 명확한 이해

코딩하는후운 2024. 3. 14. 15:25
반응형

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() 메서드가 호출되지 않습니다.

이 둘은 서로 다른 개념이며, 서로 다른 용도로 사용됩니다.

반응형