본문 바로가기

Android

Activity Task 관리하기

Activity 의 Task는 두 가지 방법으로 관리할 수 있다.

1)Manifest의 속성을 설정하는 것과 2)FLAG를 이용하는 것이다.

 

1) Manifest 설정하기

 

taskAffinity

기본값은 manifest에 정의된 패키지명이며 기본적으로 한 앱의 모든 액티비티는 공일한 affinity를 가진다. allowTaskReparenting의 값에 따라 액티비티가 쌓일 동일 태스크 스택을 결정할 수 있다. 입력값은 패키지명과 같은 형태이다.

 

launchMode

호출할 액티비티를 새로 생성할 것인지 재사용할 것인지를 결정한다. 기본값은 항상 새로 생성하도록 되어있다.

네가지 모드: standard, singleTop, singleTask, singleInstance

 

allowTaskReparenting

호출한 액티비티를 동일한 affinity를 가진 태스크에 쌓이도록 한다.

 

clearTaskOnLaunch

true면 액티비티가 재실행될 때 실행된 액티비티의 수와 관계없이 메인 액티비티를 제외하고 모두 제거한다. 기본값은 false이다.

 

alwaysRetainTaskState

기본 설정값이 false면 사용자가 특정 시간 동안앱을 사용하지 않을 경우 시스템이 메인 액티비티를 제외한 액티비티들을 제거한다. true일 경우는 시스템이 관여하지 않는다.

 

finishOnTaskLaunch

앱을 다시 사용할 때 기존 액티비티를 종료할지 여부를 결정한다. 기본값이 false일 경우 종료하지 않는다.

 

 

2) startActivity() 메서드에 전달하는 FLAG값으로 태스크 관리

 

FLAG_ACTIVITY_CLEAR_TOP

호출하는 액티비티가 스택에 있으면 해당 액티비티를 Top으로 이동시키기 위해 그 위에 존재하던 액티비티를 모두 삭제한다. 예를 들어 액티비티 A/B/C/D/E가 스택에 있을 때, C를 호출하면 D/E를 삭제해서 C를 화면에 나타낸다.

 

FLAG_ACTIVITY_MULTIPLE_TASK

호출되는 액티비티를 메인으로 하는 새로운 태스크를 생성한다. 이렇게 하면 동일한 액티비티를 하나 이상의 태스크에서 열 수 있다.

 

FLAG_ACTIVITY_NEW_TASK

새로운 태스크를 생성하여 생성된 태스크 안에 액티비티를 추가할 때 사용한다. 단, 기존에 존재하는 태스크 중에 생성하려는 액티비티와 동일한 affinity를 가지고 있는 태스크가 있으면 해당 태스크로 액티비티가 들어간다. 하나의 애플리케이션 안에서는 모드 액티비티의 기본 affinity가 같은 태스크 안에서 동작하지만, 무조건 태스크가 새로 생성되는 것은 아니고 FLAG_ACTIVITY_MULTIPLE_TASK플래그와 함께 사용해야한다.

 

FLAG_ACTIVITY_SINGLE_TOP

호출되는 액티비티가 Top에 있으면 해당 액티비티를 다시 생성하지 않고, 존재하던 액티비티를 다시 사용한다. 액티비티 A/B/C가 있을 때 C를 호출하면 기존과 동일하게 A/B/C가 나온다.