Android/Android 일반

Intent Flag

lipnus 2019. 3. 20. 17:46
반응형


Intent

val iT = Intent(this, MainActivity::class.java)
iT.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(iT)




FLAG_ACTIVITY_SINGLE_TOP

iT.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)

동일한 액티비티가 연속으로 쌓을 경우, 새로 Create하지 않고 기존 액티비티를 onPause(), onNewIntent(), onResume() 순서로 재활용





FLAG_ACTIVITY_CLEAR_TOP

iT.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

새로 호출한 액티비티가 이미 스택에 쌓여있는 경우, 해당 액티비티를 순서로 재활용하고, 아래 있는 액티비티는 onDestory() 해버린다.


[A] (RootActivity)

[A] -> [B] -> [C] -> [D] -> [B]  (적용 O)  결과 : [A] -> [B]

[A] -> [B] -> [A]  (적용 O)  결과 : [A]

[A] -> [B] -> [B]  (적용 O)  결과 : [A] - [B] 

[A] -> [B] -> [C]  (적용 X)  




FLAG_ACTIVITY_REORDER_TO_FRONT

iT.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)

새로 호출한 액티비티가 이미 스택에 쌓여 있는 경우, 해당 액티비티를 맨 앞으로 가져온다. onResume()

(뒤에꺼는 없어짐)


[A] -> [B] -> [C] -> [A]  (적용 O)  결과 : [B] -> [C] -> [A]

[A] -> [B] -> [C] -> [D] -> [B]  (적용 O)  결과 : [A] -> [C] -> [D] -> [B]

[A] -> [B] -> [C] -> [C]  (적용 O)  결과 : [A] -> [B] -> [C]





FLAG_ACTIVITY_NO_HISTORY

iT.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)

Activity Stack에서 [B] Activity에 "FLAG_ACTIVITY_NO_HISTORY" 속성을 적용하고 [B] -> [C] Activity를 호출 하는 경우, [C] Activity는 스택에서 제거 된다. 하지만 종료 시점은 [D] Activity가 onDestory() 되는 시점에 [C] Activity도 같이 onDestory() 된다.


기본원리

1-1) [A] -> [B] -> [C] - [D]  (적용 O) ([B]에 속성 추가)  

1-2) [A] -> [B] -> [C] -> [D]  ([C]가 스택에서 제거됨) ([D]에서 백키누름)  

1-3) [A] -> [B]  (결과)


2-1) [A] -> [B] -> [C] -> [C] -> [C]  (적용 O)  (3번째 [C] 에서 속성 추가)

2-2) [A] -> [B] -> [C] -> [C] -> [C]  (4번째 [C] 가 스택에서 제거됨) (5번째 [C]에서 백키누름) 

2-3) [A] -> [B] -> [C]  (결과)


 












참고: https://arabiannight.tistory.com/entry/286 [아라비안나이트]

반응형