
[Android] 안드로이드 액티비티 생명주기 정리 및 활용 방법
안드로이드 앱을 개발할 때 액티비티(Activity) 생명주기를 이해하는 것은 필수입니다. 생명주기를 잘 활용하면 앱의 성능을 최적화하고, 불필요한 리소스 낭비를 방지할 수 있습니다. 이번 글에서는 액티비티 생명주기의 개념과 효과적인 활용 방법을 정리해보겠습니다.
1. 액티비티 생명주기란?
액티비티는 앱에서 사용자와 직접 상호작용하는 화면 단위의 구성 요소입니다.
안드로이드에서는 앱이 실행되거나 중단될 때 적절한 상태를 관리하기 위해 액티비티 생명주기(Activity Lifecycle)를 제공합니다.
📌 생명주기 메서드와 역할
메서드 | 설명 |
---|---|
onCreate() | 액티비티가 처음 생성될 때 호출 |
onStart() | 화면에 보이기 시작할 때 호출 |
onResume() | 사용자와 상호작용 가능한 상태가 될 때 호출 |
onPause() | 다른 화면이 나타나기 직전에 호출 |
onStop() | 화면에서 완전히 사라질 때 호출 |
onDestroy() | 액티비티가 완전히 종료될 때 호출 |
onRestart() | 중단된 액티비티가 다시 실행될 때 호출 |
아래 그림은 안드로이드 공식 문서에서 제공하는 액티비티 생명주기 다이어그램입니다.

2. 주요 생명주기 메서드 및 활용 방법
1) onCreate() – 액티비티가 처음 생성될 때
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("Lifecycle", "onCreate 호출됨")
}
✅ 해야 할 작업:
- UI 요소 초기화
- 데이터 로드 (ViewModel 사용 권장)
- Intent 데이터 처리
❌ 하지 말아야 할 작업:
- 애니메이션 실행 (onResume에서 수행)
- 긴 네트워크 요청 (백그라운드 스레드에서 실행)
2) onStart() – 화면이 사용자에게 보이기 시작할 때
override fun onStart() {
super.onStart()
Log.d("Lifecycle", "onStart 호출됨")
}
✅ 해야 할 작업:
- UI 업데이트
- 센서 및 리스너 등록
3) onResume() – 사용자와 상호작용 가능한 상태
override fun onResume() {
super.onResume()
Log.d("Lifecycle", "onResume 호출됨")
}
✅ 해야 할 작업:
- 애니메이션 시작
- 사용자 입력 감지
- 포그라운드 서비스 실행
4) onPause() – 다른 화면이 나타나기 직전
override fun onPause() {
super.onPause()
Log.d("Lifecycle", "onPause 호출됨")
}
✅ 해야 할 작업:
- 애니메이션 및 미디어 재생 중지
- 리소스 해제 (센서, 위치 서비스 등)
5) onStop() – 화면에서 완전히 사라질 때
override fun onStop() {
super.onStop()
Log.d("Lifecycle", "onStop 호출됨")
}
✅ 해야 할 작업:
- 앱 데이터를 저장
- 백그라운드 작업 최소화
6) onDestroy() – 액티비티가 완전히 종료될 때
override fun onDestroy() {
super.onDestroy()
Log.d("Lifecycle", "onDestroy 호출됨")
}
✅ 해야 할 작업:
- 리소스 해제
- BroadcastReceiver 등록 해제
7) onRestart() – 중단된 액티비티가 다시 실행될 때
override fun onRestart() {
super.onRestart()
Log.d("Lifecycle", "onRestart 호출됨")
}
✅ 해야 할 작업:
- 화면 및 데이터 갱신
3. 생명주기 활용 예제 코드
아래 코드는 액티비티의 모든 생명주기에서 로그를 출력하는 예제입니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("Lifecycle", "onCreate 호출됨")
}
override fun onStart() {
super.onStart()
Log.d("Lifecycle", "onStart 호출됨")
}
override fun onResume() {
super.onResume()
Log.d("Lifecycle", "onResume 호출됨")
}
override fun onPause() {
super.onPause()
Log.d("Lifecycle", "onPause 호출됨")
}
override fun onStop() {
super.onStop()
Log.d("Lifecycle", "onStop 호출됨")
}
override fun onDestroy() {
super.onDestroy()
Log.d("Lifecycle", "onDestroy 호출됨")
}
override fun onRestart() {
super.onRestart()
Log.d("Lifecycle", "onRestart 호출됨")
}
}
💡 실행 후 로그캣(Logcat)을 확인하면 생명주기 흐름을 쉽게 확인할 수 있습니다.
4. 생명주기를 활용한 앱 최적화 팁
✅ ViewModel을 사용하여 데이터 유지
onDestroy()
에서 데이터를 저장하는 대신 ViewModel을 사용하면 더 효율적으로 데이터를 유지할 수 있습니다.
✅ onSaveInstanceState() 활용
- 앱이 강제 종료되거나 프로세스가 중단될 경우,
onSaveInstanceState()
를 사용하여 데이터를 저장할 수 있습니다.
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("USER_INPUT", userInput.text.toString())
}
✅ LifecycleObserver 사용하여 생명주기 관리
- Jetpack의 LifecycleObserver를 활용하면 생명주기 관련 처리를 분리할 수 있습니다.
class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResumeEvent() {
Log.d("Lifecycle", "Observer - onResume 호출됨")
}
}
lifecycle.addObserver(MyObserver())
액티비티의 생명주기를 잘 이해하고 활용하면 앱의 안정성을 높이고, 불필요한 리소스 낭비를 줄일 수 있습니다.
특히 onCreate()
, onResume()
, onPause()
, onDestroy()
의 동작을 제대로 파악하고, ViewModel, LifecycleObserver 등의 최신 기술을 활용하면 더욱 효과적인 앱 개발이 가능합니다.