안드로이드 학습(Kotlin)

3. Android 4대 컴포넌트 (Activity, Service, BroadcastReceiver, ContentProvider)의 이해

리저브콜드브루 2025. 1. 24. 14:50
728x90
반응형

Andoird의 4대 컴포넌트는 앱의 구조와 실행 흐름을 결정하는 핵심 요소다.

각 컴포넌트는 독립적으로 동작하면서도 서로 상호작용하며 앱의 기능을 구성한다.


Activity (화면 구성 컴포넌트)

  • UI를 포함한 단위 화면을 제공
  • 사용자와의 상호작용을 담당
  • 생명주기를 가진다.
  • Activity Stack (Task) 개념을 기반으로 동작
  • Intent를 사용해 다른 Activity 또는 앱과 상호작용

Activity의 생명주기 (Lifecycle)

메서드 설명
onCreate() Activity가 생성될 때 호출됨
onStart()  화면에 보이기 시작할 때 호출됨
onResume()  사용자와의 상호작용이 가능한 상태
onPause()  다른 Activity가 실행될 때 호출됨
onStop()  완전히 가려졌을 때 호출됨
onDestroy()  Activity가 소멸될 때 호출됨
onRestart()  Activity가 중지된 후 다시 시작될 때 호출됨

Activity Stack (Task & Back Stack)

  • Android Activity는 Stack 구조(LIFO: Last In First Out)로 관리된다.
  • 새 Activity가 실행되면 기존 Activity 위에 쌓인다.

launchMode 속성

AndroidManifest.xml에서 launchMode 속성을 설정하여 Activity의 생성 방식을 변경할 수 있다.

launchMode  설명
standard 기본 모드, 호출될 때마다 새 인스턴스를 생성, 뒤로가기 버튼을 누르면 하나씩 제거됨
singleTop  현재 Task의 최상위에 동일한 Activity가 있으면 재사용
singleTask  새로운 Task를 생성하고, 기존 인스턴스가 있으면 재사용
singleInstance  독립적인 Task에서 실행되며, 다른 Activity와 함께 실행되지 않음

launchMode 사용 예시

AndroidManifest.xml 설정

<activity android:name=".StandardActivity"
    android:launchMode="standard"/>

Intent로 실행

Intent intent = new Intent(this, StandardActivity.class);
startActivity(intent);

launchMode에 따른 Task 및 Stack 동작

모드 기존 인스턴스 존재 시 새로운 Task 생성 여부 onNewIntent() 호출 여부
standard 새로 생성 X X
singleTop 최상위에 있으면 재사용 X O
singleTask 기존 인스턴스 재사용 O O
singleInstance 기존 인스턴스 재사용 O(독립적) O

Service (백그라운드 작업 컴포넌트)

  • UI 없이 백그라운드에서 실행되는 컴포넌트
  • 장시간 실행되는 작업 수행(예: 음악 재생, 파일 다운로드, 백그라운드 데이터 동기화)
  • 시스템이 필요 시 자동 종료할 수 있음

Service의 유형

유형 설명
Foreground Service 사용자에게 지속적으로 표시되며, Notification을 필수로 포함해야 함
Background Service UI 없이 실행되며 일정 시간이 지나면 시스템이 자동 종료
Bound Service 서비스가 종료될 때 호출

Service의 생명주기

메서드 설명
onCreate() 서비스 생성 시 호출
onStartCommand() 명령을 받아 실행될 때 호출
onBind() 다른 컴포넌트에서 서비스에 연결할 때 호출
onDestroy() 서비스가 종료될 때 호출

BroadcastReceiver (이벤트 감지 컴포넌트)

  • 앱 간, 시스템 간 이벤트를 감지하고 처리하는 역할
  • 일반적으로 UI가 필요하지 않으며, 특정 이벤트 발생 시 동작

BroadcastReceiver의 유형

유형 설명
정적 등록(Manifest 선언) 앱이 실행되지 않아도 동작
동적 등록(코드에서 등록) 앱이 실행 중일 때만 동작

정적 등록 예시 (AndroidManifest.xml)

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

정적 등록 예시 (코드)

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_LOW);
registerReceiver(new MyReceiver(), filter);

ContentProvider (앱 간 데이터 공유 컴포넌트)

  • 앱 간 데이터를 안전하게 공유하는 역할
  • SQLite, 파일, 네트워크 데이터를 노출 가능
  • URI를 사용하여 데이터를 읽고 수정 가능

 주요 메서드

메서드 설명
query() 데이터 조회
insert() 데이터 삽입
update() 데이터 수정
delete() 데이터 삭제

 

728x90
반응형