본문 바로가기
Android App/Kotlin

ActivityResultLanuncher의 사용

by AppJinny 2022. 11. 28.

*ActivityResultLanuncher의 사용 

-엑티비티에서 데이터를 받아오기 위해서 사용

-엑티비티 A와 B가 있을 때 A에서 B엑티비티를 생성 후 B엑티비티에서 A엑티비티로 데이터를 받아오고 싶을 때 사용

 

*ActivityForResult의 Deperated

-AndroidX Activity와 Fragment에 도입된 ActivityResult API 권장

-결과를 얻기 위해 엑티비티를 시작할 때 메모리 부족으로 인해 프로세스와 엑티비티가 소멸될 수 있음

(특히 카메라 사용과 같이 메모리를 많이 사용하는 작업의 경우 소멸 확률이 매우 높음)

 -기존 방법은 Activity에서 startActivityResult를 통해서 콜백을 등록하고 onActivityResult에서 콜백처리 하므로 두 메서드가 같은 곳에서 구현을 해야하는데 메모리 부족으로 제대로 동작이 안될 수 있음



*ActivityResultLauncher와 ActivityForResult의 차이점

1. Activity ResulAPI에서의 다른 엑티비티를 실행하는 코드에서 결과 콜백 분리

-기존의 startActivityForResult 메서드를 사용하면 항상 onActivityResult에서 콜백을 받아서 처리

-이렇게 할 경우 메모리가 부족해져서 Activity가 사라질 수 있음

-이 것을 방지하기 위해서 Activity를 실행하는 부분과 Result Callback 부분을 분리하여 처리

-registerForActivityResult() 메서드는 콜백을 등록하는 역할을 해줌


2.RequestCode의 삭제

-Result Callback 부분을 분리해서 구현했기 때문에 requestCode가 삭제됨


3. Activity가 종료된 후 다시 만들어져도 Result값을 얻을 수 있음

-A 액티비티와 B 액티비티가 있을 때 startActivityResult메서드와 onActivityResult메서드를 사용해서 구현할 경우

--A -> B 실행, 메모리 부족으로 A가 소멸됨

--B 액티비티 종료 후 setResult() 메서드로 결과값 넘김

--A의 소멸 후 다시 생성돼서 B에게 결과값을 요청한 줄 모름

 

-ActivityResultLauncher객체와 registerForActivityResult()를 사용한 경우

--A -> B 실행, 메모리 부족으로 A가 소멸됨

--B 액티비티 종료 후 setResult() 메서드로 결과값 넘김

--소멸한 A가 다시 생성돼도 registerForActivityResult() 메서드가 다시 콜백을 등록해 주어 결과값을 받아올 수 있음

 

 

 

*참고

-https://aal-izz-well.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%BD%94%ED%8B%80%EB%A6%B0-activityResultLauncherActivityForResult-%EB%8C%80%EC%B2%B4

 

-https://kimyunseok.tistory.com/40

 

 


이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.