본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] registerForActivityResult 사용방법

by MinChan-Youn 2023. 2. 2.

안녕하세요~ 챠니입니다! :)

이번에는 registerForActivityResult에 대해서 알아보도록 하겠습니다 :)

 

registerForActivityResult란 Activity 또는 Fragment에서, Activity Result API에서 제공하는 registerForActivityResult() API를 통해서 결과 콜백을 등록할 수 있습니다.

 

startActivityForResult 또는 onActivityResult의 개념이 registerForResultActivity로 변경이 되는 부분이니 잘 체크하고 사용하면 보다 더 편리하고 빠르게 코딩을 할 수 있습니다.

 

    registerForActivityResult 사용방법

     

    *A class

    class A : AppCompatActivity() {
        lateinit var activityResultLauncher: ActivityResultLauncher<Intent>
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_a)
    
    
    
    		...
            
            
            activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
                if (it.resultCode == RESULT_OK) {
                    val return = it.data?.getStringExtra("return") ?: ""
                }
            }
    
            val intent = Intent(this, B::class.java)
            activityResultLauncher.launch(intent)
            
            
            ...
        }
    }

     

    *B class

    class A : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_a)
            
            ...
            
            val intent = Intent(this, MainActivity::class.java).apply {
                putExtra("address", "Seoul")
            }
    
            setResult(RESULT_OK, intent)
            if (!isFinishing) finish()
            
            ...
        }
    }

     

     

    [중요] Tip!

     

    registerForActivityResult는 initialization, onAttach(), onCreate()에 registerForActivityResult()를 호출해야 한다고 나와있습니다. 

     

     공식문서에 명시된 이유

    For this reason, the Activity Result APIs decouple the result callback from the place in your code where you launch the other activity. As the result callback needs to be available when your process and activity are recreated, the callback must be unconditionally registered every time your activity is created, even if the logic of launching the other activity only happens based on user input or other business logic.

    결과를 얻기 위해 Activity를 시작할 때, 메모리 부족으로 인해 프로세스와 Activity가 소멸될 수 있다. 따라서 Activity Result API는 다른 Activity를 실행하는 코드에서 결과 콜백을 분리한다.  프로세스 및 작업을 다시 생성할 때 결과 콜백을 사용할 수 있어야 하므로 다른 작업을 시작하는 로직이 사용자 입력 또는 다른 비즈니스 로직에 따라서만 발생하더라도 작업이 생성될 때마다 콜백을 무조건 등록해야 합니다.
     

    활동에서 결과 가져오기  |  Android 개발자  |  Android Developers

    개발자 앱 내의 활동이든 다른 앱의 활동이든 다른 활동을 시작하는 것이 단방향 작업일 필요는 없습니다. 다른 활동을 시작하고 다시 결과를 받을 수도 있습니다. 예를 들어, 앱에서 카메라 앱

     

     

     

     

     

     

     

     

    질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

    응원의 댓글은 저에게 큰 힘이 된답니다! :)

    즐거운 하루되세요!

     

    깃허브 보러 놀러오세요 👇 (맞팔환영)

    https://github.com/younminchan

     

    younminchan - Overview

    안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

    github.com