*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://kimyunseok.tistory.com/40
이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.
'Android App > Kotlin' 카테고리의 다른 글
스레드(Thread)-루퍼, 핸들러, 메시지 (0) | 2022.11.29 |
---|---|
스레드(Thread)-메인 스레드, 백그라운드 스레드 (0) | 2022.11.29 |
카메라 및 갤러리 사용, 권한처리(CAMERA-지원중단) (0) | 2022.11.28 |
데이터베이스-ORM(Object-Relational Mapping) 라이브러리 Room사용 (0) | 2022.11.25 |
관계형 데이터베이스-SQLite 사용 (0) | 2022.11.21 |