TIL - 6 # startActivityForResult Deprecated 안드로이드에서 `startActivityForResult` 는 액태비티간에 데이터를 전달할 때 사용했던 API 입니다. 하지만 오래전에 해당 API가 deprecated가 되었으며, 새로운 API 사용을 권장하고 있습니다. 왜 해당 메서드가 deprecated가 되었으며, Activity에서 결괏값을 받는 방법에 대해서 정리해보고자 합니다. ### 왜 `startActivityForResult` 는 Deprecated 되었는가? 기존 방식으로 인하면 startActivityResult로 Activity를 실행하면 실행한 Activity에서 결괏값을 받아 `onActivityResult` 에서 상태에 따라서 데이터를 처리해줄 수 있었습니다. 하지만 이 방식에는 문제점이 있었습니다. 예를 들어 카메라에서 찍은 사진을 가져오는 경우 메모리 부족으로 인해 프로세스와 Activity가 Destroy 되는 가능성이 있었으며, 이를 해결하기 위해 결괏값을 받는 API가 Activity를 실행하는 코드에서 분리할 필요성이 있었습니다. 따라서 Activity가 생성될 때마다 콜백을 다시 등록을 할 수 있는 API의 형태로 변경이 되었습니다. ### Activity에서 사용법 가장 간단하게 `registerForActivityResult` API를 사용하면 됩니다. 변수로 생성해주면 되며, 파라미터로는 `ActivityResultContract` 와 결괏값을 받아올 callback만 넣으면 됩니다.. `ActivityResultContract` 의 경우에는 어떻게 intent를 실행할지 정의해야 되며, 결괏값을 어떻게 가져올건지에 대해서 정의해야됩니다. 기본적으로 `StartActivityForResult()` 를 사용하면`startActivityForResult` 과 유사하게 결괏값을 받아올 수 있게 정의되어있습니다. 참고 : `https://developer.android.com/training/basics/intents/result#custom` ### 번외 : Compose에서 사용하는 방법 일반적으로 Activity에서 사용하는 것과 유사합니다. `rememberLauncherForActivityResult` API를 사용하면 동일하게 Activity가 재구성 돼도 결괏값을 받아올 수 있습니다. 참고 : `https://developer.android.com/jetpack/compose/libraries#activity_result`