onNewIntent란?
intent를 이용해 이미 켜져있는 Activity를 startActivity(intent)로 재호출할 때(launchMode가 singleTop이거나 intent에 FLAG_ACITIVITY_SIGNLE_TOP을 추가한 경우 등 - standard로는 호출이 안됨. ) 불려지는 매서드다.
1. setIntent()
onNewIntent가 불려졌을 경우 setIntent()를 하면 getIntent()의 리턴값을 변경하는 해준다.
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setResultIntent()
setIntent(intent)
setResultIntent()
}
var clickCount = 0
fun startButtonClick(view: View){
clickCount+=1
val intent = Intent(this,MainActivity::class.java)
intent.putExtra("text","클릭수 $clickCount")
startActivity(intent)
}
private fun setResultIntent(){
val intent = intent?.getStringExtra("text")
Log.d("intent11","$intent")
}
(상단 코드의 MainActivity는 launchMode가 singleTop으로 되어있음)
시작 버튼을 눌렀을 때 startButtonClick이 불릴때, MainActivity 를 다시 시작하게 해주면 setResultIntent()를 통해 다음과 같이 로그(intent11)가 찍힌다.
1번 클릭시 : null, 클릭수 1
2번 클릭시 : 클릭수 1, 클릭수2 ...
이를 통해 setIntent를 해주면 getIntent의 값이 바뀌는 것을 알 수 있다.
https://developer.android.com/reference/android/app/Activity#onNewIntent(android.content.Intent)
2. launchMode
activity의 launchMode에는 기본 모드인 standard가 있고, 그 외 'singleTop' ,'singleTask' ,'singleInstance' 가 있다.
singleTop
|
가장 상위에 동일한 acitivty가 있다면 onNewIntent를 통해 호출
|
singleTask
|
기존에 생성된 activity가 있다면 그 activity의 onNewintent를 호출, 단일로 따로 task를 가지고 있으며 그 task의 루트에만 존재할 수 있다.
(호출할 경우 해당 task로 변동, 재사용됨)
|
singleInstance
|
singleTask와 동일하지만 다중 인스턴스가 불가능하다. 하나의 태스크에 하나의 activity만 존재하여 다시 호출할 경우 새로운 task로 호출
|
https://developer.android.com/guide/topics/manifest/activity-element?hl=ko#lmode
'개발 공부 > 안드로이드' 카테고리의 다른 글
Android Room 2 - 적용하기 (0) | 2022.07.03 |
---|---|
android Room 1 - 알아보기 (0) | 2022.07.03 |
android, kotlin 시간차이 구하기 (0) | 2022.07.03 |
andrid SoundPool 음성파일/효과음 재생 (0) | 2022.07.03 |
android 권한 요청 (0) | 2022.07.03 |