본문 바로가기
Android/Android Core

[Android] Activity 생명주기 정리

by quessr 2025. 2. 24.

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()이 호출됩니다.
    Logcat 예시:
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 생명주기 관리 시 주의사항

  1. onCreate()
    •    뷰 초기화 및 첫 데이터 로딩을 처리합니다.
    •    시간 소모가 큰 작업은 피해야 합니다.
  2. onStart() / onResume()
    •    UI를 사용자에게 표시하고 포커스를 획득하는 시점입니다.
    •    애니메이션, 리스너 등록 등의 작업을 수행합니다.
  3. onPause()
    •    포커스를 잃기 전에 호출됩니다.
    •    애니메이션 정지, 센서 리스너 해제 등을 처리합니다.
    •    빠르게 실행되는 작업만 수행해야 합니다.
  4. onStop()
    •    Activity가 더 이상 사용자에게 보이지 않을 때 호출됩니다.
    •    네트워크 연결 해제, 리소스 정리 등 무거운 작업을 수행할 수 있습니다.
  5. onDestroy()
    •    Activity가 소멸되기 전에 호출됩니다.
    •    메모리 누수를 방지하기 위해 리소스를 해제해야 합니다.
반응형