[Android] Task 와 LaunchMode를 톺아보자

우발자·2025년 8월 22일
1


Process의 Task 차이점

우선 Process는 앱을 실행하는 실행단위이다. 앱에 모든 정보가 담긴다고 봐야된다. 하지만 그에 비해 Task는 앱에서 Activity의 정보만 저장하여 관리된다.

그리고 task는 다른 앱에서 실행되는 activity도 참조하여 가져올 수 있다.


LaunchMode란?

intent-filter에 launchMode를 설정하면 액티비티의 task 관리 방식을 정할 수 있다. 보통 크게 5가지에 launchMode가 있는데 하나씩 알아보자!

1. standard


standard는 아무 설정을 안해주면 적용되는 가장 기본 모드이다.
가장 큰 특징은 액티비티를 생성할 때마다 새로 task에 쌓인다는 점이다.
한마디로 같은 액티비티가 중복으로 쌓인다.

2. singleTop


singleTop은 task에 내가 실행할 액티비티가 이미 최상위 액티비티에 있으면 새로 생성하지않고 해당 액티비티의 onNewIntent() 통해 재활용한다. 하지만 최상위 액티비티에 없다면 새로운 액티비티가 중복으로 생성될 순 있다. 하지만 연속적으로는 생성될 순 없는 게 가장 큰 특징이다.

3. singleTask


singleTask로 설정된 액티비티는 생성 될 때 새로운 task를 만든다.
위에 사진처럼 C액티비티가 singleTask로 설정된 경우이다.
A -> B 까지는 task1에서 쌓이다가 C가 호출 되자마자 task2가 따로 생성되어 C액티비티가 만들어졌고 거기서 A를 또 호출하였을 때 A액티비티가 task2에 쌓이게 된다. 근데 또 C를 호출하게 되면 어떻게 될까?
task2에 있던 C액티비티 위로 스택은 모두 제거되고 onNewIntent()를 통해 C액티비티는 재활용된다.

4. singleInstance


singleTask랑 비슷한데 가장 큰 차이점은 task2가 생성 후 다른 액티비티를 호출하면 task2에 쌓이는 singleTask와는 다르게 해당 task는 다른 액티비티가 생성되지 않는다. 만약 A를 다시 호출한다면 task1에 생성된다. 한마디로 독립적인 task를 갖게 되는게 가장 큰 특징이다. 여기서 또 C를 호출한다면 sigleTask와 똑같이 onNewIntent()로 재활용 된다.

5. singleInstancePerTask


내가 이해한 바로는 위에 그림 처럼 singleInstancePerTask로 설정된 A액티비티가 있다면 3번을 호출하면 재활용되는 게 아니라 각 task가 생긴다고 이해했다.

물론 나온지 얼마 안돼서 정보가 별로 없어 잘못 이해 했을수도 있다.
singleInstancePerTask는 추후에 더 제대로 알아보고 이번엔 참고만 해야겠다.

profile
나는 안드로이드 개발자다.

0개의 댓글