Android lifecycle 정리 (activity lifecycle, fragment lifecycle, view lifecycle)

2022. 1. 31. 21:28Android/깨알 개념 정리

Activity

개념

- 앱과 상용자의 상호작용을 위한 진입점 역할과 동시에 하나의 UI화면을 그리는 container

lifeCycle

  • onCreate(): Activity launch 후 최초 한번 실행, 데이터를 목록에 바인딩하고, 활동을 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스 화할 수도 있음 
  • onStart(): 유저에게 보여지기 직전에 표시됨, broadCastReciver 등록, 앱이 UI를 관리하는 코드를 초기화
  • onResume()
    : foreground 상태, 앱이 사용자와 상호작용함
    : 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무름. 예를 들어 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트가 이에 해당됨
    : 수명 주기 구성요소가 포그라운드에서 사용자에게 보이는 동안 실행해야 하는 모든 기능을 활성화할 수 있음(예: 카메라 미리 보기 시작).
    : 활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출
  • onPause(): 포커스를 잃을 때 처음으로 호출됨(background), 짧은 시간 호출됨
  • onStop(): 다른 activity 가 보이는 상태, CPU를 비교적 많이 소모하는 종료 작업을 실행
  • onRestart(): activity 가 onStop상태에서 다시 시작될 경우 호출됨 다음으로 onStart()를 호출함 
  • onDestroy(): activity가 소멸되기 직전 호출, 데이터 viewModel의 onCleared() 

 

Fragment

개념

- 다양한 UI를 모듈화 하여 재사용하고 화면 구성을 더욱 쉽게 할 수 있도록 도와줌

lifeCycle

- activity lifecycle과 다른 점은 생성 시 onCreateView(), onViewCreated(), onViewStateRestored()가 추가되었고 소멸 시 onSaveInstanceState(), onDestroyView()가 추가되었다

  • onCreate(): fragment 가 생성된 상태, 이전에 onAttach()가 호출되며 아직 fragment view가 생성되지 않았기 때문에 view관련된 작업을 진행하면 안 됨
  • onCreateView(): fragment View를 직접 생성하고 inflate 할 수 있지만, LayoutId 를 받는 Fragment 의 생성자를 사용하여 해당 리소스 아이디 값을 통해 onCreateView() 재정의 없이도 Fragment View 를 생성할 수도 있음
  • onViewCreated(): onCreateView()로 반환된 view를 전달받음, UI의 초기값 설정 
  • onViewStateRestored(): 저장해둔 모든 state값이 fragment의 view 계층구조에 복원되었을 때 호출됨 
  • onStart(): 유저에게 보이기 직전에 표시됨
  • onResume()
    : foreground 상태, 앱이 사용자와 상호작용함
  • onPause(): 유저가 fragment를 떠나기 시작했지만 여전히 visible 일 때 호출됨 
  • onStop(): fragment가 더 이상 화면에 보이지 않게 되면 호출됨 
  • onDestroyView(): exit animation과 transition 이 완료되고, Fragment 가 화면으로부터 벗어났을 경우 Fragment View의 Lifecycle 은 DESTROYED 가 되고 onDestroy()가 호출
  • onDestroy(): Fragment 가 제거되거나 FragmentManager 가 destroy 됐을 경우, 이후 onDetach() 호출됨

 

View

lifecycle

  • onAttachedToWindow()
    : View가 Window에 연결되면 호출
    : Resource 할당을 시작, Listener 설정 가능
  • onMeasure()
    : View의 크기를 확인하기 위해 호출됨
    : ViewGroup의 경우 계속해서 각 ChildView에 대한 측정을 하고 자신의 사이즈를 결정함
  • onLayout(): View의 크기가 측정된 후 화면에 배치된 후에 onLayout이 호출됨
  • onDraw(): 크기와 위치가 계산됐고 정해졌지만 그것들을 기준으로 그릴 수 있음

View 메소드 

  • invalidate(): 변경 사항을 보여주고자 하는 특정 뷰에 대해 강제로 다시 그리기를 요구하는 메소드, text, color 등일 변경될 때 등 크기의 변화는 없이 단순 View를 다시 그려야 할 때 또는 강제로 view를 그리고자 할 때 호출 
  • requestLayout(): 뷰의 크기가 변경될 때, View를 다시 측정하기 위해 requestLayout()을 호출하여 Measure 및 Layout 단계를 다시 거칠 수 있다.