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
반응형
'안드로이드 학습(Kotlin)' 카테고리의 다른 글
6. Android Theme (테마) (0) | 2025.02.03 |
---|---|
5. Android Permission (권한) (0) | 2025.02.03 |
4. Android Activity LifeCycle과 Activity 전환 (1) | 2025.02.03 |
2. Gradle 빌드 시스템의 이해 (0) | 2025.01.24 |
1. Android 스튜디오와 프로젝트 구조 (2) | 2025.01.23 |