🔷 Activity란?
Android 앱의 핵심 구성 요소(Component) 중 하나로, 하나의 화면(UI)을 담당한다. 앱은 여러 Activity로 구성되며, 각 Activity는 생성부터 소멸까지 일련의 생명주기(Lifecycle) 를 가진다.
⚠️ 왜 중요한가? 생명주기를 제대로 관리하지 않으면 메모리 누수, 앱 크래시, 배터리 낭비, 데이터 손실이 발생할 수 있다.
🔷 Activity Lifecycle 전체 흐름
앱 실행
↓
onCreate()
↓
onStart()
↓
onResume() ← 사용자가 앱을 실제로 사용하는 상태
↓
[홈 버튼 / 다른 앱으로 이동]
↓
onPause()
↓
onStop()
↓
[앱으로 다시 복귀]
↓
onRestart()
↓
onStart() → onResume()
[화면 회전 / 앱 종료]
↓
onPause() → onStop() → onDestroy()
🔷 각 콜백 메서드 상세 정리
1️⃣ onCreate()
- Activity가 처음 생성될 때 딱 한 번 호출
- UI 초기화, 변수 선언, 데이터 바인딩 등 초기 설정 수행
- setContentView()로 레이아웃을 연결하는 곳
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 초기화 코드
}
💡 savedInstanceState를 통해 화면 회전 등으로 소멸됐을 때 이전 상태를 복원할 수 있다.
2️⃣ onStart()
- Activity가 화면에 보이기 시작할 때 호출
- 아직 사용자와 상호작용은 불가능한 상태
- 애니메이션 시작, UI 업데이트 등에 적합
override fun onStart() {
super.onStart()
// UI 관련 초기화
}
3️⃣ onResume()
- Activity가 포그라운드에서 완전히 활성화된 상태
- 사용자와 실제 상호작용이 가능한 시점
- 카메라, 센서, 위치 업데이트 등 리소스 집약적인 작업 시작
override fun onResume() {
super.onResume()
// 카메라 / 센서 / 위치 업데이트 시작
}
⚠️ 중요: onResume()은 앱이 백그라운드에서 복귀할 때마다 호출된다.
4️⃣ onPause()
- 다른 Activity가 시작되거나 멀티윈도우 모드 진입 시 호출
- Activity가 포커스를 잃기 직전 상태
- 짧고 빠른 처리만 수행해야 함 (다음 Activity 전환을 블로킹하면 안 됨)
override fun onPause() {
super.onPause()
// 진행 중인 작업 일시 정지, 임시 데이터 저장
}
⚠️ 주의: onPause()에서 무거운 작업(DB 저장 등)을 하면 화면 전환이 느려진다. 무거운 작업은 onStop()에서 처리하자.
5️⃣ onStop()
- Activity가 화면에서 완전히 사라졌을 때 호출
- 더 이상 필요 없는 리소스 해제, DB 저장 등 수행
override fun onStop() {
super.onStop()
// 리소스 해제, 데이터 저장
}
6️⃣ onRestart()
- onStop() 이후 앱으로 다시 돌아올 때 호출
- 이후 바로 onStart() → onResume() 순으로 이어짐
override fun onRestart() {
super.onRestart()
// 재시작 시 필요한 초기화
}
7️⃣ onDestroy()
- Activity가 완전히 소멸되기 직전 호출
- 메모리 누수 방지를 위한 최종 리소스 정리
- 화면 회전 시에도 호출됨 (이후 onCreate()로 재생성)
override fun onDestroy() {
super.onDestroy()
// 최종 리소스 정리
}
💡 화면 회전 시 onPause → onStop → onDestroy → onCreate → onStart → onResume 전체 사이클이 다시 실행된다.
🔷 시나리오별 호출 순서 요약
시나리오 호출 순서
| 앱 최초 실행 | onCreate → onStart → onResume |
| 홈 버튼 누름 | onPause → onStop |
| 홈에서 앱 복귀 | onRestart → onStart → onResume |
| 화면 회전 | onPause → onStop → onDestroy → onCreate → onStart → onResume |
| 앱 완전 종료 | onPause → onStop → onDestroy |
🔷 리소스 관리 Best Practice
메서드 해야 할 일
| onCreate() | UI 초기화, 변수 선언 |
| onResume() | 카메라, 센서, 위치 업데이트 시작 |
| onPause() | 센서, 애니메이션 일시 정지 |
| onStop() | DB 저장, 네트워크 연결 해제 |
| onDestroy() | 메모리 누수 방지 최종 정리 |
🔷 ⭐ 핵심 포인트 정리
- onResume() ↔ onPause() 는 항상 쌍으로 생각하자. onResume에서 시작한 것은 반드시 onPause에서 멈춰야 한다.
- 화면 회전은 Activity를 완전히 재생성한다. 데이터 보존이 필요하면 ViewModel 또는 onSaveInstanceState()를 활용하자.
- onPause()는 가볍게 — 이 메서드가 오래 걸리면 다음 화면 전환이 지연된다.
- onDestroy()가 항상 호출된다는 보장은 없다 — 시스템이 메모리 부족 시 강제 종료할 수 있으므로 중요한 데이터는 onPause() 또는 onStop()에서 저장해야 한다.
- Jetpack ViewModel + LiveData 조합을 사용하면 생명주기를 더 안전하게 관리할 수 있다.
'Android Studio > App Components' 카테고리의 다른 글
| 예제 (0) | 2026.03.02 |
|---|---|
| Android Manifest (0) | 2026.03.02 |
| Implicit Intent (0) | 2026.03.02 |
| Explicit Intent (0) | 2026.03.02 |