우찬쓰 개발블로그

Activity LaunchMode & Intent Flag정리 본문

안드로이드/안드로이드 개발

Activity LaunchMode & Intent Flag정리

이우찬 2023. 8. 24. 21:06
반응형

1년에 한번 정도씩 까먹을때쯤 관련 이슈가 일어나서 그냥 정리해두기로..

 

LaunchMode

 

Standard (default)

- 항상 새로 생성. 

[push A]
A

[push B]
A - B

[push A]
A - B - A

[push A]
A - B - A - A

 

SingleTop

- 최상단에 이미 그 Activity가 있을경우 그대로 사용.

- 새로 호출시 onCreate 대신 onNewIntent가 호출됨.

[push A] #SingleTop
A

[push B]
A - B

[push A] #SingleTop
A - B - A

[push A] #SingleTop
A - B - A

 

SingleTask

- 같은 taskAffinity의 어떠한 Task stack 내에 이미 그 Activity를 가지고 있다면, 해당 Activity가 나올때까지 pop 함.

- (나) Task stack 내에 있다가 (가) Task stack 에 들어있는 Activity를 호출하면 (나) Task stack에 있는것들은 pop하지 않음.

- onCreate 대신 onNewIntent 가 호출됨.

1. 하나의 Task 일 경우
[push A] #SingleTask
A

[push B]
A - B

[push C]
A - B - C

[push D]
A - B - C - D

[push C] #SingleTask
A

2. 두개의 Task 일 경우
[push A] #SingleTask
(가) A

[push B]
(가) A - B

[push C to 나]
(가) A - B
(나) C

[push D]
(가) A - B
(나) C - D

[push A] #SingleTask
(가) A
(나) C - D

 

SingleInstance

- SingleTask와 거의 동일하지만, 무조건 혼자만의 Task를 생성함.

[push A]
(가) A

[push B]
(가) A - B

[push C] #SingleInstance
(가) A - B
(나) C

[push D]
(가) A - B - D
(나) C

 

Intent Flag

많아서 써본것만 정리

 

FLAG_ACTIVITY_CLEAR_TOP

- 그 Activity가 이미 현재 Task stack에 있을 경우, 해당 Activity가 나올때까지 pop 함.

- 새로 호출시 onCreate 대신 onNewIntent 가 호출됨.

 

FLAG_ACTIVITY_SINGLE_TOP

- SingleTop와 동일

- 그 Activity가 이미 Task stack에의 최상단에 있을 경우 그대로 사용

- 새로 호출시 onCreate 대신 onNewIntent 가 호출됨.

 

FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP

- 해당 Activity가 나올때까지 pop하지만 onCreate 대신 onNewIntent가 호출됨.

 

FLAG_ACTIVITY_CLEAR_TASK

- 관련된 Task stack을 전부 비움.

 

FLAG_ACTIVITY_NEW_TASK

SingleTask과 동일

- 같은 taskAffinity내의 Task stack내에 이미 그 액티비티가 이미 있을경우, 해당 Activity가 나올때까지 pop 함.

- onCreate 대신 onNewIntent 호출됨.

- 같은 taskAffinity내의 Task stack내에 이미 그 액티비티가 없을 경우 새 Task 시작

 

FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK

- 관련된 Task stack을 전부 비우고 새로운 task stack으로 시작.

 

FLAG_ACTIVITY_NO_HISTORY

- 이 Activity를 Task stack에 남기지 않는다.

 

 

 

Refer

https://developer.android.com/guide/components/activities/tasks-and-back-stack?hl=ko 

 

작업 및 백 스택 이해  |  Android 개발자  |  Android Developers

일반적으로 앱에는 여러 활동이 포함됩니다. 각 활동은 사용자가 실행할 수 있는 특정 종류의 작업을 중심으로 설계되어야 하며 다른 활동을 시작할 수 있어야 합니다. 예를 들어 이메일 앱에는

developer.android.com

https://yebon-kim.tistory.com/6

 

그림으로 이해하는 Activity LaunchMode 실험👩‍🔬

저는 AndroidManifest에서 한 Activity가 여러 번 인스턴스화 되는 것을 피하기 위해 SingleTask 또는 SingleInstance를 구분하지 않고😓 적어주곤 했습니다. 특히 비밀번호 재입력 같이 똑같은 뷰에서 로직만

yebon-kim.tistory.com

 

반응형
Comments