Activity 생명주기(Activity Lifecycle)는 앱이 시작되고 종료될 때, 포커스를 얻거나 잃을 때, 백그라운드로 전환될 때 등 다양한 상황에서 호출되는 메서드들의 흐름을 의미합니다. 이를 이해하면 앱의 상태를 올바르게 관리할 수 있으며, 자원 누수나 비정상적인 동작을 방지할 수 있습니다.
1. Activity 생명주기 콜백 메서드
메서드 | 설명 |
onCreate() | Activity가 처음 생성될 때 호출됩니다. 초기화 작업(뷰 세팅, 데이터 바인딩 등)을 여기서 합니다. |
onStart() | Activity가 사용자에게 보이기 직전에 호출됩니다. (하지만 아직 포커스는 없음) |
onResume() | Activity가 포그라운드에 있으며 사용자와 상호작용 가능한 상태일 때 호출됩니다. |
onPause() | 다른 Activity가 포그라운드를 차지하기 직전에 호출됩니다. (포커스는 잃지만, 화면 일부는 보일 수 있음) |
onStop() | Activity가 더 이상 사용자에게 보이지 않을 때 호출됩니다. (완전히 백그라운드로 전환) |
onRestart() | onStop() 후에 다시 Activity가 포그라운드로 돌아올 때 호출됩니다. |
onDestroy() | Activity가 종료되기 전에 호출됩니다. 리소스 해제 작업을 이곳에서 수행합니다. |
2. 주요 사용 사례별 Activity 생명주기 흐름
사용 사례 1: Activity 열기 및 닫기
1. Activity를 시작할 때 호출되는 메서드 순서:
- onCreate() → onStart() → onResume()
Logcat 예시:
onCreate Called
onStart Called
onResume Called
2. Activity를 닫을 때 호출되는 메서드 순서:
- onPause() → onStop() → onDestroy()
Logcat 예시 (뒤로가기 버튼으로 종료):
onPause Called
onStop Called
onDestroy Called
3.핵심 포인트:
- onCreate()와 onDestroy()는 Activity의 전체 생명주기 동안 단 한 번만 호출됩니다.
- onPause()와 onStop()는 Activity가 백그라운드로 전환되거나 종료될 때 호출됩니다.
사용 사례 2: Activity 백그라운드 전환 및 복귀
1. 홈 버튼을 눌러 Activity를 백그라운드로 전환할 때:
- onPause() → onStop()
Logcat 예시:
onPause Called
onStop Called
2. 최근 앱 목록에서 다시 앱으로 돌아올 때:
- onRestart() → onStart() → onResume()
Logcat 예시:
onRestart Called
onStart Called
onResume Called
3. 핵심 포인트:
- onPause(): Activity가 포커스를 잃지만, 화면에 일부가 표시될 수 있습니다.
- onStop(): Activity가 화면에서 완전히 사라질 때 호출됩니다.
- onRestart(): onStop() 후, Activity가 다시 시작될 때 호출됩니다. onCreate()가 호출되지 않는다는 점에 주의해야 합니다.
사용 사례 3: Activity의 부분적인 가시성 유지 (다이얼로그 등)
1. 다이얼로그나 하프 스크린 액티비티(예: 공유 창)가 열릴 때:
- onPause()만 호출됩니다.
Logcat 예시:
onPause Called
2. 활동이 완전히 가려지지 않았기 때문에 onStop()은 호출되지 않습니다.
- 다시 원래 화면으로 돌아왔을 때:
- onResume()이 호출됩니다.
onResume Called
3. 핵심 포인트:
- onPause()는 포커스를 잃을 때 호출되지만, 화면의 일부가 여전히 보일 수 있습니다.
- onStop()는 Activity가 완전히 가려질 때 호출됩니다.
3. Activity 생명주기 다이어그램
+--------------------------+
| onCreate() |
+--------------------------+
↓
+--------------------------+
| onStart() |
+--------------------------+
↓
+--------------------------+
| onResume() | ← 포그라운드 (사용자와 상호작용 가능)
+--------------------------+
↓
(다른 앱 실행 시)
↓
+--------------------------+
| onPause() | ← 포커스 손실, 일부 화면 보일 수 있음
+--------------------------+
↓
+--------------------------+
| onStop() | ← 화면에서 완전히 사라짐
+--------------------------+
↓
(사용자가 앱으로 복귀할 때)
↓
+--------------------------+
| onRestart() | ← 다시 시작됨
+--------------------------+
↓
(다시 onStart() → onResume() 호출)
4. 상태별 콜백 메서드 요약
상태 | 호출되는 메서드 | 설명 |
앱 시작 시 | onCreate() → onStart() → onResume() | 앱이 실행되어 사용자와 상호작용 가능한 상태가 됨 |
백그라운드 전환 | onPause() → onStop() | 사용자가 다른 앱으로 전환하거나 홈 화면으로 이동 |
앱으로 복귀 | onRestart() → onStart() → onResume() | 백그라운드에서 포그라운드로 복귀 |
앱 종료 시 | onPause() → onStop() → onDestroy() | 앱이 완전히 종료될 때 |
부분적 가려짐 | onPause()만 호출 | 다이얼로그나 하프 스크린 등이 떠서 포커스는 잃지만 화면에 일부 표시됨 |
5. Activity 생명주기 관리 시 주의사항
- onCreate()
- 뷰 초기화 및 첫 데이터 로딩을 처리합니다.
- 시간 소모가 큰 작업은 피해야 합니다.
- onStart() / onResume()
- UI를 사용자에게 표시하고 포커스를 획득하는 시점입니다.
- 애니메이션, 리스너 등록 등의 작업을 수행합니다.
- onPause()
- 포커스를 잃기 전에 호출됩니다.
- 애니메이션 정지, 센서 리스너 해제 등을 처리합니다.
- 빠르게 실행되는 작업만 수행해야 합니다.
- onStop()
- Activity가 더 이상 사용자에게 보이지 않을 때 호출됩니다.
- 네트워크 연결 해제, 리소스 정리 등 무거운 작업을 수행할 수 있습니다.
- onDestroy()
- Activity가 소멸되기 전에 호출됩니다.
- 메모리 누수를 방지하기 위해 리소스를 해제해야 합니다.
반응형
'Android > Android Core' 카테고리의 다른 글
[Android/Kotlin] Retrofit에서 인터페이스를 활용한 API 요청 처리 원리 (0) | 2025.03.12 |
---|---|
[Android/Kotlin] ViewModel 개념과 ViewModelStore를 통한 구성 변경 시 상태 유지 원리 (0) | 2025.03.10 |
[Android/Kotlin] 비상 사운드 효과 구현: 강제 볼륨 조절 (0) | 2024.12.13 |
[Android/Kotlin] 뒤로가기 기능을 구현하는 방법: OnBackPressedDispatcher 활용법 (0) | 2024.12.03 |
[Android/Kotlin] Kakao Map V2: 특정 좌표를 모두 화면에 표시하기 (0) | 2024.12.02 |