[Android] Activity 생명주기

Subeen·2023년 12월 15일
0

Android

목록 보기
20/71

생명주기란?

사용자가 앱을 사용하다가, 앱에서 나가고, 앱으로 다시 돌아오면 액티비티 인스턴스는 수명주기 안에서 "상태"가 바뀐다. Activity 클래스에서는 액티비티가 상태 변화를 알아차릴 수 있는 콜백을 제공한다.
즉, 안드로이드 앱이 실행된 후 다른 액티비티 화면으로 전환되거나, 화면이 꺼짐, 폰 상태바를 내려서 액티비티가 가려짐, 혹은 앱이 종료 될 때 등을 상태변화가 일어난다고 한다. 이러한 상태 변화가 있을 때마다 화면에 보이는 액티비티의 생명주기 메서드를 호출해서 상태 변화를 알려준다.

활동 생명 주기 개념

활동 수명 주기 단계 간에 전환하기 위해 활동 클래스는 6가지 콜백으로 구성된 핵심 집합의
onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()를 제공한다. 활동이 새로운 상태에 들어가면 시스템은 각 콜백을 호출한다.

생명 주기 콜백

메서드설명
onCreate()액티비티가 실행 될 때 최초로 실행 됨
onStart()화면에 보여지기 시작
onResume()화면에 나타나고 실행 중인 상태
onPause()액티비티 화면의 일부가 다른 액티비티에 가려짐
onStop()액티비티가 완전히 가려짐
onDestroy()액티비티가 종료 됨

OnCreate()

  • 시스템이 먼저 활동을 생성할 때 실행되는 것으로, 필수적으로 구현해야 한다.
  • onCreate() 메서드에서 활동의 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행한다.
  • 예를 들어 onCreate()를 구현하면 데이터를 목록에 바인딩하고, 활동을 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스화할 수도 있다.
  • onCreate() 메서드가 실행을 완료하면 시작됨 상태가 되고, 시스템이 연달아 onStart()와 onResume() 메서드를 호출한다.

OnStart()

  • 활동이 시작됨 상태에 들어가면 시스템은 이 콜백을 호출된다.
  • onStart()가 호출되면 활동이 사용자에게 표시되고, 앱은 활동을 포그라운드에 보내 상호작용할 수 있도록 준비한다.
  • 이 콜백이 완료되면 활동이 재개됨 상태에 들어가고, 시스템이 onResume() 메서드를 호출한다.

onResume()

  • 활동이 재개됨 상태에 들어가면 포그라운드에 표시되고 시스템이 onResume() 콜백을 호출한다.
  • 이 상태에 들어갔을 때 앱이 사용자와 상호작용 한다.
  • 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무른다.
  • 예를 들어 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트가 이에 해당한다.
  • 방해되는 이벤트가 발생하면 활동은 일시중지됨 상태에 들어가고, 시스템이 OnPause() 콜백을 호출한다.
  • 활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한 번 호출한다.
  • onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 활동이 재개됨 상태로 전환될 때마다 필요한 다른 초기화 작업도 수행 해야 한다.

onPause()

  • 시스템은 사용자가 활동을 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출한다.
  • 활동이 포그라운드에 있지 않게 되었다 는 것을 나타낸다.
  • onPause() 메서드를 사용하여 Activity가 일시중지됨 상태일 때 잠시 후 다시 시작할 작업을 일시중지 하거나 조정한다.

onStop()

  • 활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고, 시스템은 onStop() 콜백을 호출한다.
  • onStop() 메서드에서는 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야한다.
  • 예를 들어 앱은 애니메이션을 일시중지 하거나, 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환할 수 있다.
  • onStop()을 사용하여 CPU를 비교적 많이 소모하는 종료 작업을 실행해야 한다.

onDestroy()

  • onDestroy()는 활동이 소멸되기 전에 호출된다.
    • 사용자가 활동을 완전히 닫거나 활동에서 finish()가 호출되어 활동이 종료되는 경우
    • 구성 변경(기기 회전 또는 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우
  • onDestroy() 콜백은 이전의 콜백에서 아직 해제되지 않은 모든 리소스를 해제해야 한다.

액티비티 간 화면 전환

  • 앱이 최초로 실행 되어 MainActivity 화면이 나타날 경우 onCreate() - onStart() - onResume() 순으로 메서드가 호출된다.

    MainActivity_LifeCycle D onCreate()
    MainActivity_LifeCycle D onStart()
    MainActivity_LifeCycle D onResume()

  • MainActivity에서 SubActivity로 이동할 경우 MainActivity는 Pause 상태에 들어가고 SubActivity는 onCreate() - onStart() - onResume() 순으로 메서드가 호출된다.
  • SubActivity가 Resume 상태에 들어간 후 MainActivity가 Stop 상태에 들어간다.

    MainActivity_LifeCycle D onPause()
    SubActivity_LifeCycle D onCreate()
    SubActivity_LifeCycle D onStart()
    SubActivity_LifeCycle D onResume()
    MainActivity_LifeCycle D onStop()

  • SubActivityfinish()로 종료하여 MainActivity가 나타날 경우 SubActivity는 Pause 상태에 들어가고 MainActivity는 onRestart() - onStart() - onResume() 순으로 메서드가 호출된다.
  • SubActivity가 Resume 상태에 들어간 후 MainActivity가 Stop 상태에 들어가고 이어 onDestroy가 호출된다.

SubActivity_LifeCycle D onPause()
MainActivity_LifeCycle D onRestart()
MainActivity_LifeCycle D onStart()
MainActivity_LifeCycle D onResume()
SubActivity_LifeCycle D onStop()
SubActivity_LifeCycle D onDestroy()

활동 수명 주기에 관한 이해
액티비티 생명주기

profile
개발 공부 기록 🌱

0개의 댓글