Activity 생명주기와 비교했을 때
생성시 onCreateView() -> onViewCreated() -> onViewStateRestored() 추가
파괴시 onSaveInstanceState() -> onDestroyView() 추가
onCreate()
: Fragment만 CREATED 된 상황으로, FragmentManager에 추가되었을 때 호출된다
- onCreate() 이전에 onAttach() 먼저 호출된다!
- 아직 Fragment View가 생성되지 않은 시점으로, Fragment의 View 관련 작업은 부적절
- Bundle 타입으로 savedInstanceState 파라미터가 함께 제공된다 : onSaveInstanceState() 콜백 함수에 의해 저장된 Bundle 값
- 파라미터는 Fragment가 처음 생성되었을 때만 null로 넘어오며, 그 이후 재생성 되면 onSaveInstanceState() 함수를 재정의하지 않아도 non-null 값으로 넘어온다
onCreateView(), onViewCreated()
: onCreate() 이후에 호출된다
- onCreateView()의 반환 값으로 정상적인 Fragment View 객체를 제공했을 때만 Fragment View의 LifeCycle이 생성됨
- onCreateView()를 재정의하여 Fragment View를 직접 생성, inflate 할 수 있다
- onCreateView() 재정의 없이도 Layout id를 받는 Fragment의 생성자를 사용하여 해당 리소스 id 값을 통해 Fragment View를 생성할 수도 있다
- onCreateView()를 통해 반환된 View 객체는 onViewCreated()의 파라미터로 전달된다 : 이 시점부터는 Fragment View의 LifeCycle이 INITIALIZED 상태로 업데이트 된다
- onViewCreated()에서는 View의 초기값 설정, LiveData 옵저빙, RecyclerView 또는 ViewPager2에 사용될 Adapter 세팅 등이 적절한 작업
onViewStateRestored()
: 저장해둔 모든 state 값이 Fragment의 View 계층 구조에 복원되었을 때 호출된다
- check-box 위젯의 현재 체크 상태 등 각 뷰의 상태 값을 체크할 수 있다
- View Lifecycle owner는 이 때 INITIALIZED 상태 -> CREATED 상태로 변경됨을 알린다
onStart()
: Fragment가 사용자에게 보여질 수 있을 때 호출된다
- Fragment가 attach 되어있는 Activity의 onStart() 시점과 유사하다
- 이 시점부터 Fragment의 child FragmentManager를 통해 FragmentTransaction을 안전하게 수행할 수 있다
- Fragment의 Lifecycle이 STARTED로 이동한 후 Fragment View의 lifecycle 또한 STARTED로 변환된다
onResume()
: Fragment가 보이는 상태에서 모든 Animator와 Transition 효과가 종료되고, Fragment가 사용자와 상호작용 할 수 있을 때 호출된다
- Activity의 onResume() 시점과 유사하다
- RESUMED 상태 : 사용자가 Fragment와 상호작용하기에 적절한 상태 -> 이는 반대로, onResume()이 호출되지 않은 시점에서는 입력을 시도하거나 포커스를 설정하는 임의의 작업을 하면 안된다는 것을 의미
onPause()
: 사용자가 Fragment를 떠나기 시작했지만 여전히 visible일 때 호출된다
- 주의! Fragment와 View의 Lifecycle은 PAUSED가 아닌 STARTED가 된다
onStop()
: 부모 Activity나 Fragment가 중단되었을 때, 부모 Activity나 Fragment 상태가 저장될 때 호출된다
- Fragment가 더 이상 화면이 보여지지 않을 때 Fragment와 View의 Lifecycle은 CREATED 상태가 되고 onStop() 콜백함수가 호출된다
- API 28 이상부터 onStop()이 onSaveInstanceState()보다 먼저 호출됨 -> FragmentTransaction을 안전히 수행할 수 있는 마지막 지점은 onStop()
onDestroy()
: Fragment가 제거되거나 Fragment Manager가 Destroy된 경우, Fragment View의 Lifecycle은 DESTROYED가 되며 onDestroy()가 호출된다
- 해당 지점은 Fragment Lifecycle의 끝을 알린다
- onAttach()가 onCreate() 이전에 호출된 것처럼, onDetach()는 onDestroy() 이후에 호출된다
'개발일지' 카테고리의 다른 글
[Kotlin] 형변환과 배열, 타입추론과 함수 (0) | 2023.04.19 |
---|---|
[Android] Android Architecture Pattern (0) | 2023.04.19 |
[Android] Activity 생명주기(Life-Cycle) (0) | 2023.04.15 |
[Kotlin] 필드와 변수, 데이터 타입, 늦은 초기화 (0) | 2023.03.21 |
코틀린(Kotlin) 이모저모 공부[변수, 자료형, 형변환, 배열, 함수, 흐름제어, object] (0) | 2023.01.13 |