개발 공부/안드로이드

안드로이드 onNewIntent 관련 알아보기, lauchMode

yong_DD 2022. 7. 3. 15:44

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)

 

Activity  |  Android Developers

android.net.wifi.hotspot2.omadm

developer.android.com

 

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