안드로이드 앱(Kotlin|Java)/[2025~] 안드로이드 앱

Part0_Ch03_03 Activity 생명주기 (1)

heylo 2025. 2. 3. 11:25

1) Activity Lifecycle

  • 앱의 완성도안정성을 높이기 위해 반드시 알아야 함
    • 다른 앱으로 전환 시, 비정상 종료되는 문제
    • 사용자가 앱을 사용하지 않는데, 시스템 리소스가 소비되는 문제
    • 사용자가 앱을 나갔다가 돌아왔을 때, 진행상태가 저장되지 않는 문제
    • 화면이 가로 ↔ 세로 전환될 때, 비정상 종료되거나, 진행상태가 저장되지 않는 문제

콜백

1) onCreate

  • 필수적으로 구현해야 함
  • Activity 의 생명주기 중 한 번만 발생해야하는 로직을 실행
    • 멤버 변수 정의
    • UI 구성 ( setContentView, xml 레이아웃 파일 정의 )
  • saveInstanceState 매개 변수 수신 → Activity 이전 저장 상태가 포함된 Bundle 객체

 

 

2) onStart

  • Activity 가 사용자에게 표시됨
  • 앱은 Activity 를 포그라운드로 보내 상호작용할 수 있도록 준비

 

3) onResume

  • Activity 가 포그라운드에 표시되어, 사용자와 상호 작용 할 수 있는 상태
  • 앱에서 포커스가 떠날 때 까지 onResume 상태에 머무름

 

4) onPause

  • 사용자가 활동을 떠나는 첫 번째 신호
  • 매우 짧음
  • 활동이 포그라운드에 있지 않지만, 잠시 후 다시 시작할 작업을 일시중지 하거나 조정
  • ex) 반투명 Activity 가 띄워져 포커스는 없지만 화면에 보이는 상태
  • 이 상태를 통해서, 실행중이지 않을 때 필요하지 않은 리소스를 해지할 수 있음
  • 이 상태에서, 데이터를 저장하거나, 네트워크 호출, DB의 IO 작업을 하면 안 됨
    • 매우 짧은 시간이라 메서드가 끝나기 전에 Activity 가 종료될 수 있음

 

5) onStop

  • Activity 가 사용자에게 더 이상 표시 되지 않는 상태
  • CPU 를 비교적 많이 소모하는 종료 작업을 실행해야 함
    • DB 저장
  • Activity 가 중단되면, Android OS 에서 리소스 관리를 위해, 해당 Activity 가 포함된 프로세스를 소멸시킬 수 있음

 

6) onDestroy

  • Activity 가 완전히 종료되기 전에 실행
  • 호출되는 케이스
    • finish 메서드가 호출 되어 Activity 가 종료될 때
    • configurationChange (ex 기기 회전, 멀티 윈도우) 로 인해, 시스템이 Activity 를 일시적으로 소멸시킬 때

 

 

2) Activity LifeCycle Image

출처: https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko

 

활동 수명 주기  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

 


[ 생명주기 추가 설명]

 

[1] OnCreate

onCreate, onStart 는 콜백이 호출된 다음

그 상태에 머무는 것이 아니라

바로 그 다음 상태로 전환이 된다.

 

onCreate 가 불리고 멈춰있는 상태는 없고

onStart 가 불리고 멈춰있는 상태도 없다.

 

onCreate가 불린 후에는

바로 onStart 가 불린다.

 

 

UI 구성

Activity 생명주기 중 한 번만 그리면 됨

 

SetContentView

화면을 그리기 위한 내용

 

SaveInstanceState

이전 저장 상태를 포함한다고 했으므로

 

1) Activity 가 최초로 한 번만 실행되었을 때는 값은 NULL 임

이전 저장상태가 없기 때문

 

2) 이전 저장 상태를 저장할 필요가 없다고 하면

매번 다시 실행되므로 값은 늘 NULL

 

 

 

[3] OnResume

onResume 같은 경우는 이 상태에 머물러있다.

onCreate, onStart 는 스쳐지나가는 상태라면

onResume 는 머무르는 상태라는 특징이 있다.

 

사용자와 상호작용 할 수 있는 상태

화면이 눈 앞에 보이는 상태 화면에서 클릭할 수 있고,

키보드 칠 수 있고,

Activity 에서 표현되는 데이터도 볼 수 있는 상태

 

 

[4] OnPause

onPause 상태에 머무는 경우는 거의 없고

skip 해서 지나가는 상태 중 하나

 

 

사용자가 활동을 떠나는 첫 번째 신호

사용자가 이 Activity를 통해서

뭔가 할 수 있는 상호작용이 없는 상태가 되는

트리거 같은 콜백

 

리스닝을 하거나

리소스를 사용할 필요가 없으므로

리소스를 해지하는 작업을 하면 됨

 
활동이 포그라운드에 있지 않지만,
잠시 후 다시 시작할 작업을 일시중지 하거나 조정
 

Activity 가 지금 당장 사용자 눈 앞에 보이지 않을지언정

재시작할 수 있는 상태

 

Activity 가 있는데, 그 위에 반투명한 Activity가 띄워지게 되면

화면이 아예 없어지는 것은 아님

 

위는 onPause 상태로 머무르는 케이스이다.

 

 

매우 짧은 시간 이라 메서드가 끝나기 전에 

Activity가 종료될 수 있음

매우 짧은 시간이기 때문에

이때 호출된 메서드가

반드시 끝까지 호출될 수 있음을 보장할 수 없음

 

 

[5] OnStop

앱을 실행하고 있다가

홈 버튼을 눌러서

해당 앱을 종료하지 않고 잠깐 백스택에 두는 경우

 

해당 Activity는 사용자 눈앞에 보이지도 않고

상호작용하는 상태도 아님

Activity 가 Running 되는 상태도 아님

 

onPause 상태를 거쳐서

onStop 상태가 된다.

 

 

Activity 가 중단되면, Android OS 에서 리소스 관리를 위해, 
해당 Activity 가 포함된 프로세스를 소멸시킬 수 있음

안드로이드 OS 입장에서는

지금 사용자가 당장 하고자 하는 동작

지금 당장 사용하고자 하는 앱이

우선순위가 높다.

 

1) 실행한 지 시간이 오래 지났거나

2) 리소스를 많이 사용하고 있는 상태에서는

사용자와 인터랙션이 없는 Activity 를 유지할 이유가 없다.

 

그래서 onStop 상태일 때

안드로이드 OS 관점에서

리소스를 계속 사용할 필요가 없다고 판단되는 시점이 오면

프로세스를 kill 한다.

 

onStop 상태에서

1) 프로세스를 kill 하지 않은 상태에서

다시 실행하게 되면

onRestart, onStart, onResume 가 호출이 됨

 

2) 프로세스를 kill 했다면

다시 onCreate 부터 실행

 

 

[6] OnDestroy

멀티 윈도우

원래 Android OS 에서 멀티윈도우를 지원했던 것은 아님

 

나중에 폴더블 폰이나 화면이 큰 것이 나오니까

여러개의 Activity와 여러 개의 앱을

동시에 실행할 수 있는 케이스가 나오면서

멀티 윈도우를 고려한 Life Cycle 이 추가가 되었음

 

처음에 Activity 의 Life Cycle 을 공부할 때는

멀티 윈도우의 생명주기는 제외하고

학습하는 것을 권장함


 

 

[ 생명주기 부연설명 ]

  • Activity가 최초 실행되었을 때,

onCreate(), onStart(), onResume() 가 호출됨.

 

  • onResume() 가 실행되면

실제로 사용자가 앱이 상호작용할 수 있는

Activity running 상태가 된다.

 

 

  • onPause() 상태는 잠깐 일시정지 상태로

다른 Activity가 사용자에게 보여지려고 하는 시점에

원래 보고 있던 것이 onPause() 상태가 되고,

다른 Activity 가 아예 안 보이게 되는 시점에는

onStop() 까지 호출된다.

 

 

  • onStop() 상태에서도

해당 Activity 를 종료하겠다고 명시적으로 표현을 하거나,

configuration change 처럼 화면이 전환되거나,

앱이 아예 꺼져버린다면

onDestroy() 가 호출 되어서 모두 종료가 된다.

 

 

  • 대신 onStop() 상태에서 다시 실행을 했을 때,

OS 에 의해서 해당 Activity 를 포함한 프로세스가 kill 되지 않았다면,

onRestart() 가 불린 다음에,

onStart(), onResume() 가 호출이 되어서

다시 Activity 가 실행된다.

 

 

  • OS 에 의해서 리소스 최적화를 위해서

Activity 를 가지고 있는 프로세스가 kill 이 되었다면,

다시 처음부터 onCreate() 부터 실행된다.

콜백이 언제 이루어지고, 언제 어떤 동작을 해야하는지 살펴보자.