핀수로그
  • [Android] Activity 스택 관리 (feat. Intent와 Flag)
    2023년 12월 01일 23시 36분 52초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    Case1. 특정 액티비티를 상단에 띄우기

    A - B - C 순으로 스택이 쌓였다고 할 때, C가 사용자의 화면에 떠있을 것이다. 

    이때 C에서 A로 이동하면서 B, C를 스택에서 제거하고 싶다면

    Intent의 Flag 중 FLAG_ACTIVITY_CLEAR_TOP 을 사용하면 된다.

    Intent intent = new Intent(this, AActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();

     

    이동하려는 액티비티가 스택에 이미 존재하면 그 위에 쌓여있는 모든 스택을 제거하고 해당 액티비티가 다시 상단에 오르게 되는 것이다.

     

    Case2. 스택을 모두 제거하고 싶을 때

    스택에 이동하려는 액티비티만 두고 싶을 때,

    FLAG_ACTIVITY_NEW_TASK 와 FLAG_ACTIVITY_CLEAR_TASK 를 사용하면 된다.

    Intent(
        context,
        AActivity::class.java
    ).apply {
        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
        startActivity(this)
    }
    activityAnimationMove()
    finish()

     

    FLAG_ACTIVITY_NEW_TASK

    스택에서 새 작업이 시작됨을 의미

    새로운 작업을 시작하려는 액티비티가 이미 스택에 존재하면 새로 시작하지 않고

    현재 액티비티 위로 올라오게 됨

     

    FLAG_ACTIVITY_CLEAR_TASK

    startActivity() 가 실행되기 전에 액티비티와 연결된 모든 스택이 사라지도록 함

    FLAG_ACTIVITY_NEW_TASK 랑만 사용할 수 있다고 함

     

    Intent

    메시징 객체, 다른 앱 구성 요소로부터 작업을 요청하는 데 사용할 수 있다.

    (*앱 구성 요소 : 액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 제공자)

     

    FLAG

    Intent 클래스에서 정의됨

    인텐트에 대한 메타데이터 같은 기능을 함

    안드로이드 시스템에서 액티비티를 시작할 방법에 대한 지침을 줄수도 있고

    액티비티를 시작한 다음 어떻게 처리해야할지를 알려줄 수도 있다.


    공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.

    말씀해주시면 수정하겠습니다. 감사합니다.

    References

    아래 글을 참고하여 작성 되었습니다.

     

    인텐트 및 인텐트 필터  |  Android 개발자  |  Android Developers

    An Intent is a messaging object you can use to request an action from another app component . Although intents facilitate communication between components in several ways, there are three fundamental use cases: An Activity represents a single screen in…

    developer.android.com

     

     

    Intent  |  Android Developers

     

    developer.android.com

     

    728x90
    반응형
    댓글