Activity LifeCycle

woniwon·2024년 3월 18일
0

Android

목록 보기
4/19

Activity LifeCycle

  • Activity, fragment가 시작되어서 종료되는 순간까지의 주기

onCreate()

  • Activity를 생성할 때 실행되는 콜 백으로 필수적으로 구현해야한다
  • 전체 수명 주기 동안 한 번만 발생하는 기본 애플리케이션 시작 로직
  • onCreate()가 실행되면, Activity는 createdcreated 상태가 되고, 메서드가 실행을 완료하면 Activity는 startedstarted상태가 되고, 시스템은 onStarted(), onResumed() 을 연속 호출한다.
  • Activity의 라이프 사이클과 관련된 모든 컴포넌트는 ON_CREATE 이벤트를 수신받는다.

onStart()

  • Activity가 Started**Started 상태**가 되면 시스템이 onStarted()를 호출한다.
  • 사용자에게 Activity를 표시하고, 앱에서 Activity가 Forground로 전환되어 상호작용 할 수 있도록 준비함
    • ex) UI를 유지하는 코드를 초기화 시킨다.
  • onStart() 메서드는 빠르게 완료된다. Activity는 startedstarted 상태를 유지하고 있지 않고, 콜백이 완료되면 Activity가 resumedresumed 상태로 전환되고 시스템에서 onResume() 메서드를 호출한다.
  • Activity의 라이프 사이클과 관련된 모든 컴포넌트는 ON_START 이벤트를 수신받는다.

onResume() 재개

  • Activity가 resumedresumed 상태로 전환되면 Forground로 이동하고, 시스템에서 onResum() 콜백을 호출
  • 앱에서 포커스를 잃을 때 까지, 앱이 사용자와 상호작용을 한다.
  • 포커스를 잃으면 Activity는 pausedpaused 상태가 되고, 시스템은 onPause() 콜백을 호출
  • Activity의 라이프 사이클과 관련된 모든 컴포넌트는 ON_RESUME 이벤트를 수신받는다. → 컴포넌트가 활성화 외어 있거나, 화면이 보이고 있는 동안 실행해야 하는 기능을 활성화
    ex) 카메라 미리보기를 시작한다.
  • 만약, 초기화 코드를 넣을 때는, 활동 수명 주기 콜백에 넣기 보다는 라이프 사이클 컴포넌트에 배치하여 재사용 가능하도록 한다

onPause() 일시중지

  • 사용자가 Activity를 떠난다는 첫 번째 신호 ( 떠난다고, Activity가 항상 소멸되는 것은 아니다 ) → Acitivity가 forground에 있지 않음을 나타내지만, 사용자가 멀티 윈도우 모드에 있는 경우, 항상 표시
  • Acitivity가 재개되지 않고, 완전히 보이지 않게 되면 시스템은 onStop()를 호출
  • Activity가 pausedpaused 상태에서 resumedresumed 상태로 돌아오면, onResume() 메서드를 다시 호출
    • 이때, 시스템은 활동 인스턴스를 메모리에 유지하고, onResume() 을 호출 할 때, 그 인스턴스를 호출함
  • Activity의 라이프 사이클과 관련된 모든 컴포넌트는 ON_PAUSE 이벤트를 수신받는다.
    • 이때, 실행 할 필요 없는 모든 기능을 정지 할 수 있다. ex) GPS 등 배터리 수명에 영향을 주는 모든 리소스들
  • onPause()의 실행이 짧기 때문에, 저장 작업을 수행하기에는 충분하지 않다. → 응용 프로그램이나 사용자 데이터 저장, 네트워크 호출, DB 트랜잭션은 하지 않아야한다.

onStop()

  • Activity가 사용자에게 더 이상 표시되지 않으면 stopedstoped 상태로 전환되고, 시스템에서 onStop() 콜백 호출
  • onStop()메서드에서 앱이 사용자에게 표시되지 않는 동안 필요하지 않은 리소스를 해제하거나 조정 가능
    • 애니메이션 일시 중지, 세밀한 위치 업데이트 대신 대략적 위치 업데이트 전환 등..
  • onPause()대신 onStop()를 사용하면, 사용자가 멀티윈도우 모드에서 활동을 보고 있더라도 UI 관련 작업이 지속 된다.
  • 이후, Activity는 onRestart()를 호출해 다시 사용자와 상호작용 하거나 실행이 완료되어 onDestroy()를 호출해 종료된다.
  • CPU를 많이 사용하는 종료 작업을 수행한다. (DB에 정보 저장)
    • stopedstoped 상태에서는 Activity 객체가 메모리에 유지되고 활동이 다시 시작되면, 정보를 다시 호출한다. (창 관리자에 연결되지는 않음)
    • ResumedResumed 상태로 이어지는 콜백 메서드 중에 생성된 구성 요소를 다시 초기화 할 필요가 없다.
    • ex) 시스템은 레이아웃의 각 View 객체의 현재 상태를 유지하기 때문에 사용자가 EditText 위젯에 텍스트를 입력하면 해당 내용이 유지된다.
    • 활동이 중지 된 상태에서 시스템이 메모리를 회수해야 할 경우 액티비티가 중지되면, 시스템은 메모리를 회수할 필요가 있을 때 액티비티가 포함된 프로세스를 파괴할 수 있습니다. 시스템이 액티비티가 중지된 동안 프로세스를 파괴하더라도, EditText 위젯의 텍스트와 같은 View 객체의 상태는 Bundle(키-값 쌍의 덩어리)에 보존되고 사용자가 액티비티로 다시 돌아올 경우 복원됩니다.
  • Activity의 라이프 사이클과 관련된 모든 컴포넌트는 ON_STOP 이벤트를 수신받는다.
    • 생명주기 컴포넌트가 화면에 보이지 않는 동안 실행할 필요가 없는 기능을 중지할 수 있는 시점

onDestroy()

  • Activity가 소멸되기 전에 호출
    1. 사용자가 활동을 완전히 닫았기 때문에, Activity에서 finish()가 호출될 때
    2. 기기 회전, 멀티 윈도우 모드 전환 같은 구성 변경으로 시스템이 일시적으로 Activity 소멸
  • Activity의 라이프 사이클과 관련된 모든 컴포넌트는 ON_DESTROY 이벤트를 수신받는다.
    • activity 소멸 이전에 필요한 항목을 정리한다. ( 이전 콜백에서 해제되지 않은 모든 리소스 해제 )
  • Activity 소멸 이유 결정에는 Activity에 로직을 넣는 대신. Activity의 관련 뷰 데이터를 담은 viewModel 객체를 활용한다.
    • 만약, 구조 변경으로 인해 activity가 다시 생성된다면 ViewModel은 보존된다.
    • Activity가 다시 생성되지 않으면 ViewModel에 onCleated()메서드가 호출되어 소멸되기 전 필요한 모든 데이터를 정리한다. 이 두 시나리오는 isFinishing()메서드로 구분할 수 있다.
  • Activity가 완료되면, onDestroy()는 활동이 수신하는 최종 수명 주기 콜백으로, 이것이 호출되면 시스템은 즉시 새 Activity 인스턴스를 만들고, 새 구성의 새 인스턴스의 onCreate()를 새 구성에서 호출한다.

+) Fragment Lifecycle
https://readystory.tistory.com/199

profile
단순 기록용 Velog 입니다.

0개의 댓글