onNewIntent()란
onNewIntent는 안드로이드 액티비티(Activity) 생명주기(LifeCycle)에 속하는 콜백 메소드 중 하나이다. 이 메소드는 현재 액티비티가 이미 생성되어 있고, singleTop, singleTask 또는 singleInstance와 같은 특정 launch mode를 가지고 있을 때, 새로운 인텐트로 인해 액티비티가 다시 시작할때 호출된다. 즉 onNewIntent()는 매니페스트에서 액티비티의 launchMode를 singleTop으로 설정하거나, FLAG_ACTIVITY_SINGLE_TOP 플래그를 썼을 경우, 액티비티 스택의 최상위 액티비티가 새로운 인텐트를 통해 재시작될 때 호출되는 메서드다.
왜 사용하는가?
- 인텐트 업데이트 : 실행 중이던 액티비티가 새 인텐트로 재시작될 때, 이 새로운 인텐트에 포함된 데이터를 처리하기 위해 사용된다. 딥링크나 푸시 알림을 통해 백그라운드에 있던 앱을 재실행할 때, singleTop으로 설정한 액티비티가 표시된 상태에서 백그라운드로 이동했다면 그 데이터를 처리하기 위해 onNewIntent()를 활용할 수 있다
- 액티비티 상태 유지 : singleTop 또는 singleTask로 launchMode를 설정한 경우, 해당 액티비티가 태스크 스택의 최상단에 있을 때 새 인텐트로 재시작된 경우 기존 액티비티 인스턴스가 재사용된다. 이 때 onNewIntent()를 통해 새 인텐트에 따라 액티비티 상태를 업데이트할 수 있다
어떤 경우에 사용될까?
onNewIntent(Intent intent) 메소드를 사용하는 상황은 주로 애플리케이션이 이미 실행 중일 때 새로운 인텐트를 받아야 할 필요가 있을 때이다. 이는 특정한 액티비티가 이미 스택에 있고, 그 액티비티에 새로운 데이터를 전달하거나 새로운 작업을 수행하고자 할 때 유용하다.
몇가지 예시를 가정해보자.
싱글 탑(SingleTop) 런치 모드에서의 사용
액티비티의 launchMode가 singleTop으로 설정되어 있고, 해당 액티비티가 이미 탑에 있을 때, 새 인텐트가 그 액티비티로 전달된다. 이 경우 onNewIntent가 호출되어 새 인텐트를 처리할 수 있다. 예를 들어, 사용자가 이미 열려 있는 채팅 앱에서 새 메시지 알림을 탭했을 때 해당 대화로 바로 넘어갈 수 있다.
싱글 태스크(SingleTask) 또는 싱글 인스턴스(SingleInstance) 런치 모드에서의 사용
singleTask 또는 singleInstance 런치 모드에서는 액티비티가 새로운 태스크의 루트로 생성되거나, 싱글 인스턴스 모드에서는 액티비티가 독립적인 태스크에서 실행된다. 이런 경우에도 이미 실행 중인 액티비티로 새 인텐트가 전달되면 onNewIntent가 호출된다. 예를 들어, 웹 브라우저 앱에서 새 URL을 열고자 할 때 기존 브라우저 인스턴스를 사용하여 URL을 로드할 수 있다.
검색 인텐트 처리
애플리케이션에 검색 기능이 있고 사용자가 검색 쿼리를 제출할 때마다 현재 검색 액티비티를 재사용하고자 할 때 onNewIntent를 사용할 수 있습니다. 이를 통해 사용자가 검색 결과를 탐색할 때마다 새로운 액티비티를 생성하는 대신 기존의 검색 결과를 새로운 검색 결과로 갱신할 수 있다.
NFC(Near Field Communication) 태그 처리
NFC 태그를 읽는 앱에서도 onNewIntent를 사용할 수 있습니다. 액티비티가 이미 실행 중일 때 새 NFC 태그가 스캔되면, onNewIntent를 통해 스캔된 태그의 데이터를 처리할 수 있다.
이와 같이 onNewIntent는 애플리케이션 내에서 이미 실행 중인 액티비티로 새 인텐트를 처리해야 하는 다양한 시나리오에서 유용하게 사용될 수 있다.
참고
https://onlyfor-me-blog.tistory.com/838
'Android > Study' 카테고리의 다른 글
[Android] SharedPreferences & 자동 로그인 구현 (0) | 2024.06.01 |
---|---|
[Android] runOnUiThread()에 대해서 공부해보자 (0) | 2024.06.01 |
[Android] OkHttp에 대해서 공부해보자. (feat. Refrofit) (0) | 2024.04.20 |
[Android] JUnit4으로 테스트 코드 작성하기 (0) | 2024.03.12 |
[Android] Room이란 (0) | 2024.03.11 |