Intent 는 크게 두 가지 상황에서 나오는 개념이다.
1. 안드로이드 코어 프레임워크의 Intent
2. 아키텍처 패턴에서의 Intent
2번에서의 Intent 개념은 '사용자의 액션(의도)' 그 자체를 의미한다.
이번 글에서는 1번에서의 Intent 에 관해 이야기한다.
https://developer.android.com/guide/components/intents-filters?hl=ko
인텐트 및 인텐트 필터 | App architecture | Android Developers
인텐트는 Android에서 다른 앱 구성요소의 작업을 요청하는 데 사용되는 메시지 객체로, 활동, 서비스, broadcast receiver 간의 통신을 지원합니다. 이 가이드에서는 명시적 인텐트와 암시적 인텐트를
developer.android.com
인텐트 (Intent)
인텐트는 쉽게 말해, 앱에게 무언가를 해달라고 부탁하는 '심부름꾼' 또는 '요청 메시지'이다.
공식 문서에는 `다른 앱 구성요소에 작업을 요청하는 데 사용할 수 있는 메시지 객체`라고 한다.
명시적 인텐트와 암시적 인텐트
- 명시적 인텐트 (정확한 대상 지정) | 컴포넌트 이름을 정확히 명시하기에 명시적 인텐트
명시적 인텐트는 '내 앱 안에 있는 B 화면을 띄워줘' 처럼 정확히 어떤 앱의 어떤 컴포넌트를 실행할지 콕 집어서 지시하는 방식이다.
대상이 명확하기에 주로 내가 만든 앱 내부에서 다른 화면으로 이동하거나 백그라운드 작업을 시작할 때 사용한다.
- 암시적 인텐트 (할 일만 지정)
특정 앱을 지정하지 않고 '이 텍스트를 공유해줄 앱이 있나요?'처럼 수행할 일반적인 작업(Action)만 선언하는 방식이다.
그러면 안드로이드 시스템이 기기에 설치된 앱들을 모두 살펴보고, 이 작업을 처리할 수 있는 앱(예: 카카오톡, 이메일, 메시지 등)들을 찾아 사용자에게 선택하도록 대화상자를 띄워준다.
-> 인텐트는 화면과 화면, 혹은 앱과 다른 앱 사이를 연결해주고 서로 소통할 수 있게 만들어주는 매개체 역할이다.
명시적 인텐트와 암시적 인텐트 차이
1. 대상 지정 방식의 차이
- 명시적 인텐트: 인텐트를 처리할 특정 컴포넌트 이름을 정확하게 지정
- 암시적 인텐트: 특정 컴포넌트 이름을 지정하지 않는 대신, 수행하고 싶은 일반적인 작업만을 선언 (스스로 수신할 컴포넌트를 결정)
2. 주로 사용하는 상황의 차이
- 명시적 인텐트: 자신의 앱 내부에서 구성요소를 열 때 사용. 본인 앱 내부이기에 실행할 클래스의 이름을 정확히 알고 있기 때문.
- 암시적 인텐트: 자신의 앱에서 직접 처리할 수 없는 다른 앱의 기능이 필요할 때 사용.
3. 안드로이드 시스템의 처리 방식 차이
- 명시적 인텐트: 대상이 명확히 지정되어 있어, 안드로이드 시스템이 지시받은 해당 컴포넌트를 즉시 시작.
- 암시적 인텐트: 안드로이드 시스템은 기기에 설치된 다른 모든 앱들의 매니페스트 파일에 선언된 '인텐트 필터(Intent Filter)를 살펴보고, 요청된 인텐트와 일치하는 앱을 찾음. 만약 조건을 만족하여 처리할 수 있는 앱이 단 하나라면 즉시 앱이 열리고, 여러 앱이 처리할 수 있다면 사용자가 직접 사용할 앱을 고를 수 있도록 선택 대화상자를 띄워줌.