본문 바로가기
공부/Android

Intent / Activity / Service

by svcbn 2025. 12. 28.

12/15

 

 

안드로이드에서 인텐트는, 앱의 구성 요소(Activity, Service 등) 간에 작업을 요청하고 데이터를 주고받기 위해 사용하는 메시지 객체이다.
이를 알아보기 위해서, 먼저 각 구성요소가 뭔지 알아보자

 

Activity

액티비티는 사용자와 상호작용하는 '하나의 화면' 을 의미하는 핵심 구성 요소.

대부분의 앱은 최소 하나 이상의 액티비티를 가지며, 앱을 실행했을 때 처음 보이는 화면이 메인 액티비티. 이메일 앱을 예로 들면, 받은 편지함 목록, 메일 쓰기, 메일 읽기 화면이 각각 별개의 액티비티로 구현될 수 있다.
구현시에는 setContentView() 를 통해 XML 레이아웃 파일을 연결하여, 사용자에게 버튼, 텍스트 등의 UI 를 보여준다.

액티비티는 LifeCycle 을 가지는데, 시스템에 의해 생성되고 소멸되는 과정에서 상태가 변하며 각 시점마다의 콜백 메서드를 사용할 수 있다.
onCreate() : 액티비티가 처음 생성될 때 호출되며, UI 레이아웃 설정 등 초기화 작업을 수행.
onStart() / onResume() : 화면이 사용자에게 보이고, 상호작용이 가능해지는 단계.
onPause() / onStop() : 다른 앱이 나타나거나 화면이 가려질 때 호출되며, 데이터를 저장하거나 리소스를 해제.
onDestroy() : 액티비티가 완전히 종료되기 직전에 호출.

 

Service

서비스는 UI 없이 백그라운드에서 오래 걸리는 작업을 수행하기 위한 핵심 구성 요소.

액티비티와 달리 사용자에게 보이는 화면이 없고, 종류에 따라 사용자가 다른 앱으로 전환하더라도 백그라운드에서 작업을 계속 수행할 수 있다. 기본적으로 자신이 속한 프로세스의 메인 스레드에서 실행되므로, 네트워크 작업이나 대용량 데이터 처리 시 별도의 스레드를 생성해야 앱이 멈추지 않는다.

종류에 따라 서비스를 나눌 수 있는데,

포그라운드 서비스 (Foreground Service)
사용자가 명확히 인식할 수 있는 작업을 수행할 때 사용한다. 반드시 알림(Notification) 을 표시해야 하며, Android 15 이상 최신 버전에서는 메니페스트에 구체적인 서비스 유형(mediaPlayback, location 등) 을 선언해야 한다.

백그라운드 서비스 (Background Service)
사용자가 직접적으로 인식하지 못하는 작업을 수행한다. 최신 안드로이드에서는 백그라운드 실행 제한이 엄격하여, 즉시 실행이 필요하지 않은 작업은 WorkManager 사용을 권장.

바인드된 서비스 (Bound Service)
앱 구성 요소(액티비티 등) 가 서비스에 연결되어, 서로 데이터를 주고받거나 기능을 호출할 때 사용한다. 클라이언트-서버 구조처럼 동작.


 

Intent

그래서 인텐트는, 구성요소 간 작업을 요청하고, 데이터를 주고받기 위해 사용한다. 새로운 화면(Activity) 을 띄우거나, 백그라운드 작업(Service) 을 시작하고, 시스템 공지(Broadcast) 를 전달한다.
putExtra() 를 통해 실행하려는 컴포넌트에 필요한 데이터도 함께 보낼 수 있다.

구성 요소로는, 
Action  : 수행할 공통적인 동작. (ACTION_VIEW, ACTION_DIAL, ACTION_SEND 등)
Data : 작업을 수행할 대상의 URI. (특정 웹 주소, 연락처 ID 등)
Category : 인텐트를 처리할 컴포넌트의 종류를 추가로 지정. (CATEGORY_LAUNCHER 는 앱의 첫 화면을 의미)
Extras : 복잡한 데이터를 전달하기 위한 Key-Value 쌍의 번들.
Component Name : 명시적 인텐트에서 대상을 직접 지정할 때 사용.

인텐트는 용도에 따라 종류를 나눌 수 있다.
명시적 인텐트 (Explicit Intent) : 실행할 대상 컴포넌트의 클래스 이름을 정확히 지정. 주로 앱 안에서 화면을 전환할 때 사용한다.
암시적 인텐트 (Implicit Intent) : 특정 클래스를 지정하지 않고, 수행하려는 작업(Action) 만 선언한다. 안드로이드 시스템이 해당 작업을 처리할 수 있는 적절한 앱을 찾아 연결.

암시적 인텐트를 보냈을 때, 시스템은 어떤 앱이 이를 처리할 수 있는지 판단해야 하기 때문에, AndroidManifest.xml 에 이를 선언할 수 있다. 이를 인텐트 필터(Intent Filter) 라고 한다.

 

정리하자면,
인텐트는 안드로이드 내부에서 누가, 무엇을, 어떤 데이터를 가지고 할 것인가를 전달해주는 객체. 앱 내부의 흐름을 제어할 뿐 아니라, 구글 지도나 카메라 앱 같은 외부 리소스를 앱의 기능처럼 빌려 사용할 수 있게 해준다.

'공부 > Android' 카테고리의 다른 글

SHA-256 서명  (0) 2025.12.24
.jar / .aar  (0) 2025.12.12
AndroidManifest  (0) 2025.12.11
APK 서명 체계 v3  (1) 2025.12.10
Android Studio 입문  (1) 2025.12.09