startActivityForResult(SearchActivity.newIntent(this@PostArticleActivity), REQUEST_CODE)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode != Activity.RESULT_OK) return
when (requestCode) {
REQUEST_CODE -> {
data?.let {
(...중략)
}
} ?: kotlin.run {
Toast.makeText(this, getString(R.string.loadError), Toast.LENGTH_SHORT).show()
}
}
(... 또 다른 REQUEST_CODE들에 대한 분기..)
}
}
startActivityForResult
어느 한 activity에서 새로운 activity를 띄우고, 그 activity에서의 결과 가지고 기존의 activity로 돌아올 때 주로 사용하였다.
예로 갤러리를 불러와서 사진 url를 가져온다거나, 검색화면등으로 이동한다음 검색내용을 가져오는등의 기능을 구현하는등, 새로운 화면을 불러올 때 REQUEST_CODE를 이용하여 관리하던 메서드였다.
startActivityForResult.deprecated
https://developer.android.com/training/basics/intents/result
활동에서 결과 가져오기 | Android 개발자 | Android Developers
활동에서 결과 가져오기 개발자 앱 내의 활동이든 다른 앱의 활동이든 다른 활동을 시작하는 것이 단방향 작업일 필요는 없습니다. 다른 활동을 시작하고 다시 결과를 받을 수도 있습니다. 예를
developer.android.com
그러나 해당 문서를 보면
결과를 얻기 위해 새로운 activity를 호출할 때, 메모리 부족등의 이유로 프로세스와 기존의 activity가 사라질 수 있기 때문에 (특히 카메라등의 메모리를 많이 사용하는 작업의 경우), 다른 activity를 호출하는 코드 위치에서 콜백을 분리하여야 한다고 한다.
그러기위해 새롭게 사용하는것이 registerForActivityResult() 메서드이다.
해당 메서드는 새로운 activity를 호출했던 activity가 종료되어도 기존의 activity에 다시 콜백을 등록해줘서 결과값을 정상적으로 받아올 수 있게 해준다.
private val getContent =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if(result.resultCode == Activity.RESULT_OK) {
result.data?.let {
(...중략)
}
} ?: kotlin.run {
Toast.makeText(this, getString(R.string.loadError), Toast.LENGTH_SHORT).show()
}
}
}
기존에는 onActivityResult에 REQUEST_CODE에 맞게 작성하던 코드를 위와같이 수정한다.
getContent.launch(SearchActivity.newIntent(this@PostArticleActivity))
startActivityForResult 대신 launch 메서드를 활용하여 새로운 activity를 불러오면 되며, 코드에서 볼 수 있듯 별도의 REQEUST CODE를 관리해주지 않아도 된다는 편리함도 존재한다.
'Android > Tips' 카테고리의 다른 글
Android 12 이상 SplashScreen 대응하기 (올바른 SplashScreen 구현하기) (0) | 2022.05.10 |
---|---|
CompileSdk, TargetSdk, MinSdkVersion 비교 (0) | 2021.12.16 |
툴바(ToolBar) 구현, Toolbar VS Layout (0) | 2021.12.13 |
RecyclerView에 animation 효과 주기 (0) | 2021.12.04 |
Recyclerview adapter 재활용하기 (0) | 2021.11.15 |