안드로이드 시스템·Compose 용어 사전
생명주기onCreate · onStart · onResume · onPause · onStop · onDestroy

Activity 생명주기

OS가 화면 상태를 바꿀 때 앱에 거는 콜백 계약. 짝을 맞춰 자원을 켜고 끈다.

OS와 앱 사이의 계약. OS가 화면 상태를 바꾸기 전에 앱에 알려 준다.

왜 필요한가

휴대폰은 데스크톱과 다르다

  • 화면은 한 번에 하나
  • 메모리가 빠듯해 OS 가 언제든 앱을 멈추거나 죽여야 한다

OS 가 말없이 그렇게 하면

  • 카메라를 켠 채 가려지고, 다운로드가 끊기고, 화면 데이터가 사라진다

  • "내가 네 화면을 이렇게 바꿀 테니 준비/정리해라" 를 알려 주는 것이 생명주기다

동선으로 외운다

  • 앱을 켠다 — onCreate → onStart → onResume

  • 홈 버튼 onPause → onStop

  • 다시 돌아온다 — onRestart → onStart → onResume (onCreate 는 안 불린다)

  • 뒤로가기/회전 — onPause → onStop → onDestroy

  • onCreate — 일생에 한 번. 뷰 생성 · ViewModel 연결 · 한 번뿐인 초기화 onStart/Stop 보이기 시작 / 완전히 안 보임 → 보일 때만 의미 있는 자원

    • (위치 구독 · 실시간 수집) onResume/Pause 상호작용 가능 / 일부 가림

    • 다이얼로그가 뜨면 onPause 까지만 가고 onStop 엔 안 간다

onPause는 반드시 짧아야 한다

onPause 가 끝나야 다음 화면이 그려진다

  • 여기서 디스크 쓰기나 네트워크를 하면 화면 전환이 눈에 띄게 버벅인다
  • 저장은 onStop 이나 코루틴으로 미룬다

짝을 맞춘다

override fun onStart() { super.onStart(); locationClient.requestUpdates(callback) }
override fun onStop()  { super.onStop();  locationClient.removeUpdates(callback) }

등록/해제 · 획득/반납 · 시작/중지가 반드시 짝을 이룬다 짝을 놓치면 → 배터리 소모 · 메모리 누수 · 안 보이는 화면의 크래시

면접 함정

  • "onDestroy에서 정리하면 된다"onDestroy호출이 보장되지 않는다. 프로세스가 강제 종료되면 건너뛴다. 중요한 정리는 onStop까지 끝낸다.
  • "백그라운드로 가면 onDestroy가 불린다"onStop까지만 간다. 객체는 살아 있다.

상태 다이어그램으로 정리하면

         onCreate ─→ onStart ─→ onResume ─→ [실행 중]
                        ↑          ↑            │
                   onRestart    onPause ←───────┘
                        ↑          │
                     onStop ←──────┘
                        │
                    onDestroy

다른 Activity로 이동할 때의 교차 순서

  • A 에서 B 로 이동하면

    • A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop
  • 왜 A.onStop 이 마지막인가

    • B 가 화면을 완전히 덮은 뒤에야 A 가 '안 보이는' 상태가 되기 때문
  • A.onPause 에서 무거운 일을 하면 B 의 등장이 그만큼 늦어진다

  • 반대로 A.onStop 에서 자원을 정리하면 전환이 매끄럽다

onSaveInstanceState는 언제 불리나

  • Android 9 이하 — onStop '전'
  • Android 9 이상 — onStop '후'

어느 쪽이든 onDestroy 전이고, '앱이 죽을 수도 있는 시점' 마다 불린다 뒤로가기로 사용자가 명시적으로 닫으면 불리지 않는다 (복원할 이유가 없다)

실무에서 무엇을 어디에 두나

  • onCreate — Compose setContent · ViewModel 연결 · DI 주입
  • onStart — 센서·위치 구독 · 실시간 소켓 연결
  • onResume — 카메라 미리보기 시작 · 애니메이션 재개
  • onPause — 카메라 정지 · 애니메이션 정지 (짧게!)
  • onStop — 소켓 해제 · 구독 해제 · 초안 저장
  • onDestroy — 거의 아무것도 — 호출이 보장되지 않는다

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 생명주기 — Activity·Fragment·생명주기 인지