본문 바로가기
개인공부/android

Intent and IntentFilter

by 왕큰새 2021. 12. 23.
728x90

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

 

- 앱 구성 요소 : Activity, Service, Broadcast receiver, ContentProvider

 

Intent가 구성 요소 간 작업을 요청하는 데는 여러 가지 방식이 있지만, 크게 세 가지로 나눌 수 있다.

 

1. Activity Start

 

Activity는 앱 안의 단일 화면을 나타낸다. Activity를 시작하려면, Intent를 startActivity()로 전달하면 된다.

Intent는 시작할 액티비티를 설명하고, 모든 필수 데이터를 담는다.

 

2. Service Start

 

Service는 사용자 인터페이스 없이, 백그라운드에서 작업을 수행하는 구성 요소이다.

Android 5.0(API 레벨 21) 이상부터 JobScheduler로 서비를 시작할 수 있다.

 

-JobScheduler란?

 

개발자가 정의한 작업을 스케쥴링해주는 서비스.

JobScheduler에서 제공하는 AIP를 사용해 작업을 예약할 수 있다.

실행될 작업은 JobService에 개발자가 작업을 정의하고

작업이 언제, 어떤 상황에서 실행되어야 하는지는 JobInfo에 정의된다. 

JobInfo가 JobScheduler에 전달되면, JobScheduler는 적절한 때에 JobService를 실행한다.

 

3. Delivering a broadcast

 

브로드캐스트는 모든 앱이 수신할 수 있는 메시지이다. 

시스템은 시스템이 부팅될 때, 기기가 충전을 시작할 때 등 시스템 이벤트에 대한 다양한 브로드캐스트를 전달한다. 

Intent를 sendBroadcast() 또는 sendOrderedBroadcast()에 전달하면 다른 앱에 브로드캐스트를 전달할 수 있다.

 

인텐트 유형

인텐트에는 두 가지 유형이 있다.

 

명시적 인텐트는 인텐트를 충족하는 애플리케이션이 무엇인지 지정한다. 

앱의 패키지 이름 또는 구성 요소 클래스 이름을 제공한다.

명시적 인텐트는 앱 안에서 구성 요소를 시작할 때 사용한다.

예를 들어, 사용자 작업에 응답하여 새로운 액티비티를 시작하거나, 백그라운드에서 파일을 다운로드하기 위해 

서비스를 시작하는 것 등이 해당된다.

 

암시적 인텐트는 특정 구성 요소의 이름을 제공하지 않지만, 그 대신 수행할 작업을 선언하여 다른 앱의

구성 요소가 이를 처리할 수 있도록 한다. 

예를 들어, 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시작 인텐트를 사용하여

해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청하는 것이 해당된다.

 

Service를 시작하는 경우, 항상 구성 요소 이름을 지정해야 한다. 그렇지 않으면 인텐트에 어느 서비스가 응답할지 확신 할 수 없고, 사용자도 어느 서비스가 시작되는지 볼 수 없게 된다.

인텐트 필터

앱의 매니페스트 파일에 들어 있는 표현으로, 구성 요소가 수신하고자 하는 인텐트의 유형을 나타낸다.

예를 들어 액티비티에 대한 인텐트 필터를 선언하면 다른 여러 앱이 특정한 종류의 인텐트를 가지고

액티비티를 직접 시작할 수 있다.

액티비티에 대한 인텐트 필터를 선언하지 않는 경우, 명시적 인텐트로만 시작할 수 있다.