
안드로이드에서 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:
- FLAG_ACTIVITY_NEW_TASK: 새로운 태스크를 생성하고 그 태스크의 첫 번째 액티비티로 해당 액티비티를 시작한다.
만약 이미 같은 애플리케이션의 인스턴스가 태스크에 존재한다면, 그 태스크가 전면으로 올라오게 된다. - FLAG_ACTIVITY_SINGLE_TOP: 만약 대상 액티비티가 현재 태스크의 최상위에 이미 실행 중이라면, 새 인스턴스를 생성하지 않고 기존의 인스턴스에 onNewIntent()를 호출한다. 그렇지 않다면, 새로운 인스턴스가 생성된다.
- FLAG_ACTIVITY_CLEAR_TOP: 해당 플래그와 함께 시작된 액티비티가 이미 태스크에 존재한다면, 그 액티비티 위에 있던 모든 액티비티들이 제거된다. 결과적으로 대상 액티비티가 최상위로 올라오게 된다.
- FLAG_ACTIVITY_CLEAR_TASK와 FLAG_ACTIVITY_NEW_TASK: 이 두 플래그를 함께 사용하면, 기존 태스크가 완전히 제거되고 해당 액티비티를 새 태스크의 루트로 시작한다.
- 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 플래그는 이미 열려 있는 액티비티로 사용자가 돌아가고자 할 때 해당 액티비티를 태스크의 최상위로 재배치하여, 사용자 경험을 개선하고 액티비티 관리를 효율적으로 할 수 있게 한다.