Android Studio/App Components

Android Activity Lifecycle

shDev 2026. 3. 2. 20:28

🔷 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() 메모리 누수 방지 최종 정리

🔷 ⭐ 핵심 포인트 정리

  1. onResume() ↔ onPause() 는 항상 쌍으로 생각하자. onResume에서 시작한 것은 반드시 onPause에서 멈춰야 한다.
  2. 화면 회전은 Activity를 완전히 재생성한다. 데이터 보존이 필요하면 ViewModel 또는 onSaveInstanceState()를 활용하자.
  3. onPause()는 가볍게 — 이 메서드가 오래 걸리면 다음 화면 전환이 지연된다.
  4. onDestroy()가 항상 호출된다는 보장은 없다 — 시스템이 메모리 부족 시 강제 종료할 수 있으므로 중요한 데이터는 onPause() 또는 onStop()에서 저장해야 한다.
  5. 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