목차
1. 인텐트 개요
2. 인텐트 구조
2.1. 카테고리
2.2. 타입
2.3. 컴포넌트
2.4. 엑스트라
3. 명시적/암시적 인텐트
3.1. 명시적 인텐트
3.2. 암시적 인텐트
항상 공식문서를 참조하는 습관을 들이도록 노력합시다.
https://developer.android.com/reference/android/content/Intent?hl=ko
Intent | Android Developers
developer.android.com
https://developer.android.com/guide/components/intents-filters?hl=ko
인텐트 및 인텐트 필터 | 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
1. 인텐트 개요
컴포넌트 클래스는 개발자 코드로 생성, 실행할 수 없습니다.
그래서 생명주기는 개발자 코드로 관리할 수 없습니다.
그렇기 때문에 인텐트는 굉장히 중요하게 사용됩니다.
인텐트란 컴포넌트를 실행하기 위해 시스템에 전달하는 데이터를 담는 클래스입니다.
정보들을 인텐트 객체로 시스템에 전달하면 컴포넌트가 실행됩니다.
인텐트는 같은 앱의 액티비티 간 뿐만 아니라 다른 앱과의 연동에서도 쓰입니다.
즉 컴포넌트를 실행하기 위해 시스템에 전달하는 메시지라고 할 수 있겠습니다.
컴포넌트는 개발자 코드가 아닌 시스템에 의해서 실행되기 때문에 중요하다고 할 수 있습니다.
간단하게 이야기해서 1번 액티비티와 2번 액티비티가 있습니다.
우리는 흐름상 1번 액티비티를 먼저 실행한 후 2번 액티비티를 수행한다고 생각합니다.
하지만 규모가 큰 서비스에서는 이러한 흐름이 꼭 이루어지는 것은 아닙니다. 3번 4번 액티비티가 있다면 3번에서 2번으로 또는 2번에서 1번 등 굉장히 다양한 경우의 수가 있습니다.
그렇기에 1번에서 2번으로 액티비티를 바로 넘겨주는 것이 아닌 인텐트를 거쳐서 넘겨준다고 생각하면 될 것 같습니다.
또한 인텐트는 같은 서비스(앱)에서만 해당되는 것이 아닙니다.
서로 다른 앱에서도 인텐트를 사용해 1번 앱에서 2번 앱을 실행할 수 있습니다.
2. 인텐트 구조

인텐트의 구조는 크게 action과 data로 이루어져 있습니다.
액션에는 수행되기 위한 일반적인 액션이 포함되어 있는데요, ACTION_VIEW, ACTION_EDIT등이 있습니다.
데이터에는 Uri로 표현되는 다양한 데이터들이 포함되어 있습니다.
밑의 사진은 그 예시입니다.

2가지 요소에 더해서 4가지 요소 정도를 더 뽑을 수 있습니다.

카테고리, 타입, 컴포넌트, 엑스트라가 있습니다.
2.1. 카테고리
카테고리는 인텐트를 처리하는(ex.액티비티) 구성요소에 추가 정보를 담는 것입니다.

카테고리의 용도는 주로 액티비티의 역할을 분류해놓고 인텐트와 함께 다른 액티비티로 넘어갈 때 액티비티 이름이 아닌 카테고리 이름으로 넘어갈 수 있습니다.
2.2 타입
일반적으로 타입은 데이터 스스로 추정됩니다. 하지만 이 속성을 추가해서 인텐트 데이터의 명확한 타입을 명시할 수 있습니다.
2.3 컴포넌트
명확한 컴포넌트 클래스의 이름을 명시합니다.
2.4 엑스트라
인텐트 엑스트라 데이터
인텐트는 앞서 살펴본 액션과 데이터 말고도 더 많은 정보를 포함하고 있습니다.
그 중 엑스트라 데이터에 대해서 알아보겠습니다.
https://developer.android.com/reference/android/content/Intent?hl=ko#standard-extra-data
Intent | Android Developers
developer.android.com
인텐트 엑스트라 데이터는 번들의 일종입니다.
번들은 여러가지 타입의 값을 저장하는 Mapping 클래스 입니다.
엑스트라 데이터를 이용하여 확장된 정보를 제공할 수 있습니다.
3. 명시적/암시적 인텐트
인텐트는 기본적으로 컴포넌트를 실행하기 위해 사용됩니다.
그리고 그 컴포넌트 정보를 어떻게 설정하는 지에 따라 2가지로 나눌 수 있습니다.
그 2가지가 명시적, 암시적 인텐트입니다.
3.1 명시적 인텐트
명시적 인텐트는 클래스 타입 레퍼런스 정보를 활용한 인텐트 입니다.
val intent: Intent = Intent(this, SecondActivity::class.java)
위의 코드는 레퍼런스로 액티비티 클래스를 넘겨줍니다.
대강 예측 할 수 있듯이 같은 앱에서 컴포넌트(SecondActivity)를 실행할 때 쓰입니다.
하지만 다른 앱이라면 위와 같이 사용할 수 없습니다.
3.2 암시적 인텐트
암시적 인텐트는 주로 서로 다른 앱에서 컴포넌트를 실행할 때 이용합니다.
암시적 인텐트는 매니페스트 파일에 선언된 인텐트 필터를 이용합니다.
<activity android:name=".SecondActivity"
android:exproted=:true">
<intent-filter>
<action android:name="ACTION_EDIT"/>
<categor android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"/>
</intent-filter>
</activity>
위와 같이 name속성만 지정하지 않고 intent-filter를 설정해 놓으면 다른 앱에서 해당 태그를 이용해 인텐트를 이용할 수 있습니다.
val intent = intent()
intent.action="ACTIOIN_EDIT"
intent.data = Uri.parse("https://www.google.com")
startActivity(intent)
위와 같은 방법으로 이용하게 됩니다.
'개발 > 안드로이드' 카테고리의 다른 글
[Android] Utility (0) | 2023.05.30 |
---|---|
[Android] Android Weekly (0) | 2023.05.28 |
[Android] 모듈화로 빌드시간을 줄인다? (2) | 2023.05.28 |
[Android] 앱 시작 Activity 변경 (0) | 2023.03.19 |
[Android] ViewPager2, Fragment (1) | 2023.03.16 |