addToBackStack, setReorderingAllowed

Gio·2025년 5월 18일
0

addToBackStack?

addToBackStack는 백 스택에 해당 트랜잭션을 추가하는 메서드이다. 추가된 트랜잭션은 commit된 이후에도 저장되며, 이후 스택에서 꺼내어 사용할 수 있다.

트랜잭션을 스택에서 꺼내며 작업을 되돌리려면 setReorderingAllowed 메서드를 통해 추가할 트랜잭션의 reorderingAllowed 속성을 true로 설정해주어야 한다.

setReorderingAllowed?

트랜잭션 내부 및 트랜잭션간의 작업들을 최적화할지 설정하는 메서드이다. true로 설정할 경우 중복되거나 어차피 취소될 작업들을 제거한다.

val transaction = fragmentManager.beginTransaction()
transaction.add(R.id.container, FragmentA())  // 첫 번째 명령
transaction.replace(R.id.container, FragmentB())  // 두 번째 명령
transaction.setReorderingAllowed(true)
transaction.commit()

이런 작업이 있다고 가정할 때, FragmentA는 즉시 FragmentBreplace되기에 사실상 생성할 필요가 없어진다. 시스템 입장에서는 FragmentA를 생성할 필요가 없다고 판단해 제거한다.

하지만 이는 onCreate, onDestroy같은 생명주기를 거치지 않을 수도 있다는 의미이기 때문에 주의해야 한다. 이 과정에서 부작용이 발생할 수 있다.

트랜잭션 1: Fragment A를 추가
트랜잭션 2: Fragment B를 추가
트랜잭션 3: Fragment A를 제거

위 3개의 트랜잭션이 순서대로 수행된다고 가정하자. 중복된 작업을 제거하지 않는다면 FragmentB가 생성될 때 FragmentA가 존재할 것이라고 생각할 것이다. 하지만 setReorderingAllowed(true)를 통해 중복 작업이 제거되며 예상과는 달리 FragmentA가 생성조차 되지 않았다는 상황에 처한다.

더 나은 트랜지션을 위해 프래그먼트 내부의 상태 변화 순서를 재정렬할 수도 있다. 추가될 프래그먼트의 onCreate가 기존 프래그먼트의 onDestroy 호출 전에 호출될 수 있다. 이렇게 하면 파괴 → 생성 사이에 생기는 격차가 없어지며 자연스럽게 전환이 가능하다.

profile
틀린 부분을 지적받기 위해 업로드합니다.

0개의 댓글