본문 바로가기
Android

[Android] 안드로이드에서 FLAG_ACTIVITY_REORDER_TO_FRONT 플래그를 활용한 효율적인 액티비티 관리

by quessr 2024. 4. 8.

 

안드로이드에서 Intent와 함께 사용되는 Flag는 액티비티나 서비스 등의 컴포넌트를 시작할 때 시스템에게 어떻게 해당 컴포넌트를 관리해야 하는지에 대한 추가적인 지시를 제공한다.
이러한 Flag들은 주로 액티비티의 태스크와 백스택 관리에 관련된 동작을 정의하는데 사용된다.

Intent Flag 사용 방법:

Intent 객체에 Flag 설정하는 방법은 간단하다.
Intent 객체를 생성한 , setFlags() 메서드나 addFlags() 메서드를 사용하여 flag 추가할 있다.

Intent intent = new Intent(context, TargetActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

 

또는 여러 Flag 조합할 때는:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

 

주요 Intent Flags:

  1. FLAG_ACTIVITY_NEW_TASK: 새로운 태스크를 생성하고 태스크의 번째 액티비티로 해당 액티비티를 시작한다.
    만약 이미 같은 애플리케이션의 인스턴스가 태스크에 존재한다면, 태스크가 전면으로 올라오게 된.
  2. FLAG_ACTIVITY_SINGLE_TOP: 만약 대상 액티비티가 현재 태스크의 최상위에 이미 실행 중이라면, 인스턴스를 생성하지 않고 기존의 인스턴스에 onNewIntent() 호출한다. 그렇지 않다면, 새로운 인스턴스가 생성된다.
  3. FLAG_ACTIVITY_CLEAR_TOP: 해당 플래그와 함께 시작된 액티비티가 이미 태스크에 존재한다면, 액티비티 위에 있던 모든 액티비티들이 제거된다. 결과적으로 대상 액티비티가 최상위로 올라오게 된.
  4. FLAG_ACTIVITY_CLEAR_TASK FLAG_ACTIVITY_NEW_TASK: 플래그를 함께 사용하면, 기존 태스크가 완전히 제거되고 해당 액티비티를 태스크의 루트로 시작한다.
  5. FLAG_ACTIVITY_NO_HISTORY: 플래그를 사용하여 시작된 액티비티는 백스택에 남지 않는다. 사용자가 액티비티를 떠나면 액티비티가 종료되어 백스택에서 제거된다.

그 중에서도 오늘 정리 하고자 하는 Flag는 FLAG_ACTIVITY_REORDER_TO_FRONT 이다.

 

이 플래그는 액티비티를 시작할 때 해당 액티비티가 이미 현재 태스크에 이미 존재하는 경우, 그 액티비티를 태스크의 최상위로 재배치한다.

새로운 인스턴스를 생성하지 않고 기존의 인스턴스를 최상위로 옮긴다.
이 플래그는 사용자가 애플리케이션 내에서 이미 열려 있는 액티비티로 돌아갈 때, 그 액티비티를 태스크의 맨 앞으로 가져오기 위해 사용된다.

 

예를 들어, 사용자가 A -> B -> C 순서로 액티비티를 열었다고 가정해 보자.
이때, C 액티비티에서 A 액티비티를 FLAG_ACTIVITY_REORDER_TO_FRONT 플래그와 함께 시작하면, A 액티비티가 태스크의 최상위로 재배치된다.
결과적으로 액티비티 스택은 B -> C -> A 순서가 된다.

 

이렇게 FLAG_ACTIVITY_REORDER_TO_FRONT 플래그를 사용함으로써, 사용자에게 이미 열려있는 액티비티로의 전환을 더 원활하게 하고, 액티비티 스택 관리를 더 효율적으로 할 수 있게 도와준다.
또한, 불필요한 액티비티 인스턴스의 생성을 방지하여 리소스 사용을 최적화할 수 있다는 장점이 있다.

이 플래그는 특히 알림을 통해 사용자가 애플리케이션 내 특정 화면으로 이동하려 할 때 유용하게 사용될 수 있다.
사용자가 알림을 클릭했을 때, 알림에 해당하는 액티비티가 이미 열려 있으면 해당 액티비티를 재배치하여 사용자가 원하는 내용을 바로 볼 수 있도록 한다.
이는 애플리케이션의 사용성을 향상시키는 데 크게 기여한다.

요약하자면, FLAG_ACTIVITY_REORDER_TO_FRONT 플래그는 이미 열려 있는 액티비티로 사용자가 돌아가고자 해당 액티비티를 태스크의 최상위로 재배치하여, 사용자 경험을 개선하고 액티비티 관리를 효율적으로 있게 한다.