Activity, Fragment LifeCycle

상상코딩·2022년 1월 3일
0

안드로이드

목록 보기
4/21

Activity LifeCycle

  • onCreate - Created 상태
    필수 구현. 전체 lifeCycle 중에 한번만 발생.
    xml, 멤버변수 정의, 일부 UI 구성, 데이터를 리스트에 바인딩, activity를 viewmodel과 연결. 클래스 변수 인스턴스화. savedInstanceState 매개변수 수신. 이전 저장 상태가 포함된 Bundle. 처음생성된 경우 null.

  • onStart - Started 상태
    화면에 보이는 상태. 화면에 보이며 앱은 acitivity를 포그라운드로 보내 상호작용할 수 있도록 준비.
    UI 관리하는 코드 초기화. 매우 빠르게 완료되어 바로 onResume 호출.

  • onResume - Resumed 상태
    상호작용. 앱에서 포커스가 떠나기 전까지 쭉 onResume상태.
    포그라운드에서 사용자에게 보이는 동안 실행해야하는 모든 기능 활성화(ex.카메라 미리보기)

  • onPause - Paused 상태
    곧바로 사용자가 화면을 떠날 때 시스템이 호출하는 첫번째 메소드. 이 메소드는 아주 잠깐 실행되므로 저장작업을 하기에는 시간이 부족할 수 있음. 사용자 데이터 저장 또는 DB 트랜잭션 실행 금지. 이 메서드가 끝나기 전에 완료하지 못할 수 있음. 무거운 작업은 onStop에서하고 데이터 저장은 viewModel이나 onSaveInstanceState()참조.
    포그라운드에서 필요없는 기능 정지(ex. 카메라 미리보기, 시스템 리소스, 센서 핸들(GPS) 등 배터리 수명에 영향을 미치는 리소스 해제)

이 때 완전한 해제는 onPause보다 onStop을 이용하자. 멀티윈도우나 분할 화면 때문 - 안드로이드 9이하에서는 멀티 화면에서 하나에 포커스가 되어있다면 Resumed상태 다른 하나는 Paused상태이므로 다시 포커스 받을 확률이 높으니~!!

그런데 또!!!!! 안드로이드 10부터는 다중 재개(Multi-resumed) 가 등장한다. 다중재개에서는 포커스와 상관없이 화면에 나오는 모든 액티비티들이 모두 Resumed상태에 머무른다. 따라서 어떤 액티비티가 포커스를 받는지 알 수 있는 다른 콜백함수가 필요하다. - onTopResumedActivityChage()함수이다.(기존에는 onResumed()가 하던 역할) 그러나 이 함수는 optional로서 activity lifecycle에 포함되지 않으므로 아주 가끔만 사용해야 함.

  • Android 9(API 수준 28) 이하에서는 포커스가 있는 활동만 RESUMED 상태에 있고 나머지는 모두 PAUSED입니다. 단일 앱 프로세스 내에 여러 활동이 있는 경우 Z 순서가 가장 높은 활동이 RESUMED이고 나머지는 PAUSED입니다.
  • Android 10(API 수준 29) 이상에서 상단에 포커스를 맞출 수 있는 모든 표시된 활동이 RESUMED입니다.

dialog는 activity가 아니라 onPause()를 호출하지 않음. 그러나 권한요청은 다이얼로그처럼 보이는 Ui라서 onPause()를 호출한다.

  • onStop - Stopped 상태
    포커스가 완전이 빠졌을 때(화면전체가 가려졌거나 백그라운드로 갔을 때).
    앱이 사용자에게 보이지 않는 동안 필요하지 않은 리소스 해제 및 조정(ex. 애니메이션 중지, 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환.)

    onStop은 항상 호출되는 것은 아님. 메모리가 부족할 경우 호출이 안 될 수도 있음.

  • onDestroy - Destroyed 상태
    activity가 소멸되기 전에 호출.
  1. 활동이 종료되는 경우(스택에서 날리거나 finish()호출.)
  2. 구성변경(ex. 기기 회전 또는 멀티 윈도우모드)로 인해
    --> 시스템단에서 액티비티를 죽일 때 onDestroy()호출이 될 때가 있고 안 될때도 있음!
profile
히히낙낙

0개의 댓글