외로운 Nova의 작업실

안드로이드 앱 프로그래밍 - 23(태스크 관리) 본문

Programming/Kotlin - Android

안드로이드 앱 프로그래밍 - 23(태스크 관리)

Nova_ 2023. 2. 10. 12:31

- 태스크

액티비티 태스크란 앱이 실행될때 시스템에서 액티비티의 각종 정보를 저장하는 공간입니다. 시스템의 stack처럼 뒤돌아가기 버튼을 눌렀을때 어떤 액티비티로 돌아가야하는지를 저장하는 공간입니다. 예를 들어 A_OneActivity와 A_TwoActivity가 한 앱에 있을때 순서대로 A_OneActivity -> A_TwoActivity를 실행한다면 태스크에는 아래와 같이 저장됩니다.

그렇다면 실행하는 앱마다 태스크는 하나만 존재할까요? 그렇지는 않습니다. 이번에는 앱과 앱이 연동되어 실행되는 구조를 알아보겠습니다. 아래와 같은 실행 구조가 있다고 가정해보겠습니다.

그러면 아래와 같이 태스크가 구성됩니다.

그렇다면 아래와 같은 경우는 어떨까요?

아래와 같이 태스크가 구성됩니다.

 

- 태스크 제어

원래 태스크는 시스템이 자동으로 관리해주지만 개발자가 원하는대로 제어할 수 있습니다. 제어하는 방법에는 2가지 방법이 있으며 첫번째는 매니페스트파일을 이용하는 방법이고 두번째는 인텐트의 flag 정보를 설정하는 방법이 있습니다. 

 

<매니페스트 파일 제어>

<activity android:name=".TwoActivity" android:launchMode="singleTop">

위와같이 매니페스트파일에 작성하여 launchmode로 실행 모드를 설정해주면됩니다.

 

<인텐트 flag 설정>

반면 코드에서는 인텐트를 발생시키기전에 flags 속성에 설정합니다.

var intent(this, TwoActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)

 

- launchmode 종류

<스탠더드>

실행모드를 standard로 설정하면 설정하지 않은 기본값과 같습니다. 특징은 인텐트가 발생하면 항상 객체가 생성되고 태스크에 등록됩니다.

<싱글톱>

실행모드를 singleTop으로 설정하면 액티비티 정보가 태스크의 위쪽에 있을때 인텐트가 발생해도 객체를 생성하지 않습니다. 

싱글톱은 아래와 같은 상황일때 많이 사용합니다.

채팅방 액티비티를 다시 호출했고 메시지만 바꾼 상황입니다. 이때 메시지를 바꾸는 콜백 함수는 아래와 같습니다.

override fun onNewIntent(intent: Intent?) {
	super.onNewIntent(intent)
}

위 함수를 재정의해놓으면 자신을 다시 실행할때 자동으로 호출됩니다. 이때 새메시지 채팅방에서 뒤로가기를 하면 채팅방 목록으로 돌아가게됩니다. 만약 스탠다드였다면 기존 채팅방으로 돌아갈것입니다.

 

<싱글태스크>

실행모드를 singleTask로 설정하면 새로운 태스크를 만들어 등록합니다. 그런데 singleTask설정은 같은 앱에서는 적용되지 않으며 다른앱의 액티비트를 인텐트로 실행할때에만 적용됩니다. 따라서 사용자가 새로운 앱을 실행하지않더라도 하나의 태스크를 다시 만들때 사용합니다. 결국 새로운 앱이 실행되는 것을 사용자에게 알리고 싶을떄 사용합니다.

 

<싱글 인스턴스>

실행모드를 singleInstance로 설정하면 싱글 태스크처럼 새로운 태스크를 만들어 등록하는데 그 태스크에는 해당 설정이 적용된 액티비티 하나만 등록됩니다. 예를들어 위와같은 순서로 실행되는 상황에서 B_OneActivity를 singleInstance로 설정하면 다음과 같습니다.

Comments