startActivityForResult Deprecated
Deprecated
startActivityForResult() onActivityResult() 가 deprecated 되었다.
공식문서를 보면 Deprecated 이유를 찾아볼 수 있다.
- AndroidX Activity와 Fragment 도입된 이후 Activity Result API 사용을 적극 권장한다.
- 결과를 얻기 위해 활동을 시작할 때, 메모리 부족으로 인해 프로세스와 활동이 소멸될 수 있다.
(특히 카메라 사용과 같이 메모리를 많이 사용하는 작업의 경우 소멸 확률이 매우 높음.)
=> 따라서, Activity Result API는 다른 활동을 실행하는 코드 위치에서 Result Callback 부분과 분리해서 만들어야 한다. Result Callback은 프로세스와 활동을 다시 생성할 때 사용할 수 있어야 하므로 다른 Activity를 실행하는 로직은 Activity가 생성될 때마다 Callback을 무조건 등록해야 한다.
Code
기존 코드
startActivityForResult(Intent intent, int requestCode)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (resultCode) {
RESULT_OK -> {
}
}
}
변경
val intent = Intent(
this@MainActivity,
TestActivity::class.java
)
registorForresult.launch(intent)
private val registorForresult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
when (result.resultCode) {
RESULT_OK -> {
...
}
}
}
Leave a comment