저번 주말에 공부했던 내용에 대해 작성한다.
Activity Intent Flag?
Activity Intent Flag는 액티비티의 중복문제나 흐름을 제어하고 싶을 때 사용한다.
intent에 addFlags를 통해 추가하는 방법과 manifest파일에서 해당 액티비티에 launchMode를 추가하는 방법이 있다.
Task?
Task는 관련된 액티비티를 순서대로 묶어 관리하는 것이다.
Stack 형태로 먼저 실행된 액티비티부터 아래에서부터 차곡차곡 쌓인다.
가장 아래에 있는 액티비티를 root Activity, 가장 위의 액티비티를 top Activity라고 부른다.
뒤로가기를 누르면 top Activity를 pop(종료)하고 그 밑의 액티비티가 top Activity가 된다.
top Activity를 제외하면 이전 생명주기를 공부했을 때 본 onStop 상태가 된다.
Android Manifest에서 제어
standard
말 그대로 표준이며 아무것도 입력 안했을 때의 디폴트값이다.
singleTop
Top Activity와 동일한 액티비티 실행 시 기존 Top Activity를 재사용한다.
singleTask
singleTask를 적용한 액티비티는 반드시 Root Activity여야 한다. 다른 액티비티가 Root로 있다면 새로운 Task를 생성하여 새로운 Task를 시작한다. 또한 이미 해당 Activity가 Root Activity로 있는 상황에서 다른 액티비티가 그 위에 쌓여있을 때 해당 액티비티를 호출하면 Root Activity를 제외한 Stack에 있는 다른 액티비티들을 Destroy 한다.
singleInstance
하나의 Task에 하나의 Activity가 존재하는 실행 모드이다. (root == top) 또한 하나의 Task에서만 호출할 수 있다.
singleInstancePerTask
해당 Activity가 root액티비티로만 존재할 수 있으며 하나의 Task에서 두 번 이상의 호출을 받지 않는다. 다른 Task에서는 다시 호출할 수 있다.
위 standard와 singleTop은 일반적으로 사용되는 기능이고 아래 3개는 자주 사용하지 않고 특정한 상황에서만 사용된다고 구글에서 말했다.
소스코드로 제어
intent를 이용해 다른 액티비티로 넘어갈 때 추가해주는 Flags로 제어할 수 있다. 자주 사용하는 몇가지만 설명하겠다.
FLAG_ACTIVITY_BROUGHT_TO_FRONT
manifest의 singleInstance와 같은 역할을 한다.
FLAG_ACTIVITY_CLEAR_TASK
말 그대로 해당 Task를 싹 지우고 액티비티를 실행한다. 따라서 실행되는 액티비티가 root Activity가 된다. FLAG_ACTIVITY_NEW_TASK 와 함께 사용되어야만 한다.
FLAG_ACTIVITY_CLEAR_TOP
1. 실행되고 있지 않은 액티비티라면 단순히 실행한다.
2. 이미 스택의 아래에서 실행되고 있는 액티비티라면 해당 액티비티 위 스택에 있는 모든 activity를 완료하고 해당 액티비티를 top으로 가져온다.(root)ABCD(top) 순서로 실행되고 있는 스택에서 이 플래그가 설정된 B액티비티를 호출하면 C와 D 액티비티를 완료하고 스택에는 AB만 남게된다.
FLAG_ACTIVITY_NO_ANIMATION
액티비티를 이동하는 애니메이션을 없엔다.
FLAG_ACTIVITY_NO_HISTORY
액티비티가 종료되면 기록이 남지 않는다.
FLAG_ACTIVITY_NO_USER_ACTION
이 플래그가 설정되면 자동적으로 엑티비티가 호출될 경우에 자동 호출되는 onUserLeaveHint()가 실행되는것을 차단한다. onUserLeaveHint()는 앱 사용중에 사용자의 액션 없이(전화 등) 액티비티가 실행, 전환 되는 경우에 호출된다.
FLAG_ACTIVITY_SINGLE_TOP
Top에 있는 액티비티를 다시 호출할 때 있던 액티비티를 재사용한다.
FLAG_ACTIVITY_REORDER_TO_FRONT
기존 실행되던 액티비티가 있으면 최상위로 올린다. 스택을 재정렬하는 효과를 가졌다.
FLAG_ACTIVITY_NEW_TASK
이 엑티비티 플래그를 사용하여 엑티비티를 호출하게 되면 새로운 Task를 생성하여 그 Task 에 엑티비티를 추가하게 됩니다. 단, 기존에 존재하는 Task들중에 생성하려는 엑티비티와 동일한 affinity를 가지고 있는 태스크가 있다면 그곳에서 새 엑티비티가 실행된다. 반드시 새 Task를 시작하고 싶다면 FLAG_ACTIVITY_MULTIPLE_TASK와 함께 사용하면 된다.
'TIL > 공부' 카테고리의 다른 글
03/25 dp와 sp (0) | 2024.03.25 |
---|---|
03/18 안드로이드 스튜디오 Empty View Activity (1) | 2024.03.18 |
03/08 코틀린 비동기 프로그래밍 (0) | 2024.03.08 |
03/07 코틀린 생명주기 (0) | 2024.03.07 |
03/06 코틀린 Context (0) | 2024.03.07 |