개발/안드로이드

[Android] Intent (인텐트)

도넛의용기 2023. 2. 19. 14:02

목차

 

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. 인텐트 구조

Intent Structure-공식문서

인텐트의 구조는 크게 action과 data로 이루어져 있습니다.

액션에는 수행되기 위한 일반적인 액션이 포함되어 있는데요, ACTION_VIEW, ACTION_EDIT등이 있습니다.

데이터에는 Uri로 표현되는 다양한 데이터들이 포함되어 있습니다.

밑의 사진은 그 예시입니다.

action-data pairs example

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

secondary intent attributes

카테고리, 타입, 컴포넌트, 엑스트라가 있습니다.

 

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