Android/study

[Android] 인텐트의 정의와 종류 (+ 플래그)

written by yunwon 2021. 9. 2. 00:50

 

안드로이드 애플리케이션은 4개의 컴포넌트로 구성되어 있다.각 요소는 하나의 독립적인 형태로 존재하며 고유한 기능을 수행한다.이들은 일종의 메시지 객체 Intent 를 통해 서로 상호작용한다.

 

 


 

인텐트 란?

 

인텐트란 애플리케이션 구성요소(4대 컴포넌트) 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.

 

예를 들어 인텐트를 활용해 화면 전환을 할 수 있다.
인텐트는 컴포넌트 A가 컴포넌트 B를 호출할 때 필요한 정보를 담고 있으며,
이 정보에는 호출되는 컴포넌트 B의 이름이 명시적으로 표시되어있거나, 속성들이 암시적으로 표시되기도 한다.
또한 호출된 컴포넌트 B가 호출한 컴포넌트 A로 어떠한 결과를 전달할 때도 인텐트가 사용된다.

 

  • 서로 독립적으로 동작하는 4대 컴포넌트 간의 상호 통신을 위한 장치이다.
  • 컴포넌트에 액션(Action), 데이터(Data) 등을 전달한다.
  • 인텐트를 통해 다른 애플리케이션의 컴포넌트를 활성화시킬 수 있다.

 

 


 

인텐트 종류

(1) 명시적 인텐트

인텐트를 통해 대상 앱의 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공한다.
즉, 호출될 대상을 확실히 알 수 있는 경우를 말한다.
주로 동일한 애플리케이션 내에서 다른 컴포넌트를 실행시킬 때 사용한다.

 

 

(2) 암시적 인텐트

특정 구성 요소의 이름을 명시하지 않았지만,

수행할 일반적인 작업을 선언해 다른 앱의 구성 요소가 처리할 수 있도록 한다.
이를 사용하면 시스템에서 매니페스트 파일에 선언된 인텐트 필터와 비교해 시작할 요소를 찾는다.
해당 인텐트와 일치하는 인텐트 필터가 있을 때 시스템에서 해당 요소를 시작하고 이를 Intent 객체에 전달한다.

 

 

더보기

인텐트 필터

인텐트 필터란 앱의 매니페스트 파일에 들어 있는 표현으로, 해당 구성요소가 수신하고자 하는 인텐트의 유형을 나타낸다. 예를 들어 액티비티에 대한 인텐트 필터를 선언하면 다른 여러 앱이 특정한 종류의 인텐트를 가지고 액티비티를 직접 시작할 수 있다. 또한 액티비티에 대한 인텐트 필터를 선언하지 않은 경우, 명시적인 인텐트로만 시작할 수 있다.

 

 


 

인텐트 플래그

안드로이드 태스크는 애플리케이션에서 실행되는 액티비티를 보관하고 관리하며

스택 형태의 연속된 액티비티로 이루어진다.
플래그를 사용해 태스크 내 액티비티의 흐름을 제어하고 액티비티 중복을 방지할 수 있다.

 

💫 인텐트 플래그 사용법

(1) AndroidManifest 사용하기

<activity android:launchMode = "사용하고자 하는 속성">
  • standard : 스택 중 어느 곳에나 위치할 수 있고, 여러 개의 인스턴스 생성 가능

  • singleTop : standard 특징 + 호출한 액티비티와 최상위 액티비티가
    동일한 경우 최상위 액티비가 재사용되고, 기존 최상위 액티비티는 pop() 처리됨

  • singleTask : 루트 액티비티로만 존재하며 하나의 인스턴스만 생성 가능,
    다른 액티비티 실행 시 동일 태스크 내에서 실행 가능

  • singleInstance : 루트 액티비티로만 존재하며 하나의 인스턴스만 생성 가능,
    태스크 내에 해당 액티비티 하나만 속할 수 있음

 

(2) 소스코드 사용하기

Intent.addFlags() 또는 Intent.setFlags()
  • FLAG_ACTIVITY_CLEAR_TOP : 호출하는 액티비티가 스택에 있을 경우,
    해당 액티비티를 최상위로 올리면서 그 위에 있던 액티비티들을 모두 삭제하는 플래그

  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 최근 실행목록에 표시하지 않길
    원하는 액티비티가 있을 경우 사용하면 표시되지 않음

  • FLAG_ACTIVITY_NEW_TASK : 새로운 태스크를 생성하여 그 태스크 안에 액티비티를 추가할 때 사용

  • FLAG_ACTIVITY_NO_HISTORY : 액티비티가 스택에 쌓이지 않게 함,
    로딩 화면(SplashActivity) 등에 사용

  • FLAG_ACTIVITY_SINGLE_TOP : 호출되는 액티비티가 최상위에 있을 경우
    해당 액티비티를 다시 생성하지 않고, 있던 액티비티 재사용

 

 

 

 

 

© 참고

https://developer.android.com/guide/components/intents-filters?hl=ko

https://kylblog.tistory.com/21

 

인텐트 및 인텐트 필터  |  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