Android lifecycle 정리 (activity lifecycle, fragment lifecycle, view lifecycle)
2022. 1. 31. 21:28ㆍAndroid/깨알 개념 정리
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 단계를 다시 거칠 수 있다.