[안드로이드] 액티비티 백스택(Activity BackStack)

SHY(code poet)·2024년 3월 28일
0
post-thumbnail

1. 기본원리: Push와 Pop

태스크: 여러 애플리케이션에서 실행 되는 액티비티들의 관계 기록
(Task is a stack of activities)

※ 아래에 제시되는 회색상자가 하나의 태스크이다.

Push: 새로운 액티비티를 시작하여, task내에 밀어 넣는 것

Back Stack
이 경우, 새롭게 추가된 activity2는 기존에 있던 Activity1의 위에 push되며, 이를 그 뒤에 있는 스택 즉, Back Stack위에 쌓였다고 표현한다.

Pop: 가장 최근의 액티비티를 스택에서 제거하는 것

아래의 사진과 같이, Activity3까지 쌓아올렸고, 현재 이 Activity3가 foreground상으로 보여지고 있다. 이때 Back버튼을 누른다고 해보자.

이는 앞서 언급한 push의 정반대 과정이다.
activity3를 제거하므로써 다시 Activity2가 보이게 된다.

Fragement에서의 Push-Pop
다음과 같이, Activity2내에 Fragment가 Push되었고, 현재 foreground(focuse된 상태)에 있는 상태이다. 여기서 만약, back을 하면 어떻게 될까? activity2가 통째로 pop될까?

아쉽게도 아니다. fragment만 pop된다.

결론: ✨Push-Pop모델은 LIFO 즉, 후입선출구조이다.✨

2.액티비티 스택의 여러가지 모드

안드로이드는 자동으로 태스크를 관리하지만, 런치모드를 통해 태스크가 관리되는 방식을 직접 설정할 수 있다.
(AndroidMeniFest.xml -> 인텐트 플래그에서 설정 )

① standard (테스크 1개)

  • 기본으로 설정되어 있는 모드. 액티비티가 호출될 때마다 테스크에 저장
    👉 여러개가 중첩될 수 있다.

② singleTop (태스크 1개 + 재활용)
-standard와 원리는 비슷. 그러나, 가장 위에 있는 액티비티가 중복해서 쌓이지는 않는다.

  • onNewIntent()를 호출하여 기존 액티비티를 재활용하서 사용하기 때문이다.

⚠️주의⚠️
중첩만 되지 않을 뿐, 중간에 다른 Activity가 존재 할 경우 중복되어 생성될 수는 있다.

③ singleTask (태스크 多 + 재활용)

  • 새로운 액티비티가 push되는 시점에 동시에 새로운 태스크를 생성한다.
  • 이제부터 이 액티비티가 호출하는 액티비티들은 새로 생성된 태스크에 쌓이게 된다.
  • 액티비티가 다시 호출될 경우 onNewIntent()를 통해 재활용된다.

👉물론 유저입장에서는 foreground만 보기 때문에 위의 두 모드와 보여지는 것은 똑같다.

④ singleInstance (태스크 多 + 재활용 + 신규 태스크에 타 액티비티 허용X)

  • 위의 singleTask와 동일하게 액티비티가 실행되는 시점에 새로운 태스크를 생성한다.
  • 그러나 차이점이 있다면, 해당 태스크에서 다른 액티비티를 허용하지 않는다.
    즉, 새로운 activity를 push하면 새로 생긴 태스크가 아닌 이전 태스크의 스택에 쌓이게 된다.

profile
그것을 이해하고자 하기 때문에 결국은 그것을 견디어내게 된다.

0개의 댓글