안드로이드

[Android | Kotlin] 태스크 관리

jay20033 2023. 12. 27. 16:10

태스크 관리 : 액티비티를 어떻게 생성하고 관리하는지를 제어하는 일

시스템에서 태스크 관리

액티비티 태스크 : 앱이 실행될 때 시스템에서 액티비티의 각종 정보를 저장하는 공간

A_OneActivity에서 A_TwoActivity를 실행한 경우

 

액티비티 객체가 2개 생성되고 시스템은 액티비티가 실행되었다는 정보를 저장하려고 태스크를 만듭니다.

뒤로가기 버튼을 눌렀을 때 태스크

 

사용자가 기기의 뒤로 가기 버튼을 누르면 이 태스크에서 위쪽에 있는 액티비티를 종료하고

그다음 위쪽에 있는 액티비티를 화면에 출력합니다.

 

앱 연동 구조에서 액티비티 실행 순서와 태스크

 

액티비티는 인텐트가 발생하면 무조건 객체를 생성합니다.

이미 같은 액티비티가 실행되어 같은 객체가 있더라도 어디선가 다시 인텐트가 발생하면

또다시 객체가 생성되고 태스크 정보에 등록됩니다. 따라서, B_TwoActivity는 2번 생성되며 태스크에 각각 등록됩니다.

 

태스크 제어

태스크에 등록되도록 제어하는 2가지 방법

  • 액티비티가 등록되는 매니페스트 파일의 <activity> 태그의 launchMode를 이용합니다.
  • 인텐트의 flags 정보를 설정하여 제어합니다.
<activity android:name=".TwoActivity" android:launchMode="singleTop">

 

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

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

 

두 방법 모두 같은데, 첫 번째 방법은 항상 설정한 대로 생성되어 태스크에 등록되지만 두 번째 방법은 인텐트가 발생할 때에 한 번만 적용되어 태스크에 등록됩니다.

 

스탠더드

  • 기본값
  • 인텐트가 발생하면 항상 객체가 생성되고 태스크에 등록

스탠더드 설정

싱글 톱

  • 액티비티 정보가 태스크의 위쪽에 있을 때 인텐트가 발생해도 객체를 생성하지 않습니다.
  • 기존 객체의 onNewIntent( ) 함수가 자동으로 호출
override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
}

 

싱글 태스크

새로운 태스크를 만들어 등록

single Task 설정은 같은 앱에서는 적용되지 않으며 다른 앱의 액티비티를 인텐트로 실행할 때에만 적용

single Task

싱글 인스턴스

singleInstance로 설정하면 싱글 태스크처럼 새로운 태스크를 만들어 등록하지만, 그 태스크에는 singleInstance 설정이 적용된 액티비티 하나만 등록됩니다.

single Instance