[ 액티비티의 생명주기와 차이점 ]
- 생성 시 onViewCreated() - onViewStateRestored() 가 추가로 있음
- 소멸 시 onSaveInstanceState() - onDestroyView() 가 추가로 있음
[ 액티비티의 생명주기와 공통점 ]
- LifeCycle 이 위에서 아래 방향으로 진행되며 Fragment 가 백스택 최상단으로 올라올 경우 생명 주기가 CREATED - STARTED - RESUMED 순으로 진행되고 반대로 백스택에서 pop 됐을 경우 RESUMED - STARTED - CREATED - DESTROYED 순으로 진행됨
- onCreate()
: Fragment 만 CREATED 된 상황이며 onCreate() 이전에 onAttach() 가 먼저 호출됨, 이 시점에서는 아직 Fragment View 가 생성되지 않았기 때문에 Fragment 의 View 와 관련된 작업을 두기에 적절하지 않음.
- onCreateView(), onViewCreated()
: onCreate() 이후에는 onCreateView() 와 onViewCreated() 콜백 함수가 이어서 호출되며 onCreateView() 의 반환값으로 정상적인 Fragment View 객체를 제공했을 경우에만 Fragment View 의 LifeCycle이 생성됨, onCreateView() 를 통해 반환된 View 객체는 onViewCreated() 의 파라미터로 전달되는데 이 시점부터 Fragment View 의 Lifcycle 이 INITIALIZED 상태로 업데이트 되므로 View의 초기값 설정, LiveData 옵저빙, RecyclerView 또는 ViewPager2 에 사용될 Adapter 세팅 등을 onViewCreated() 에 설정하면 적절함.
- onViewStateRestored()
: onViewStateRestored() 콜백 함수는 저장해 둔 모든 state 값이 Fragment 의 View 계층 구조에 복원 됐을 때 호출함, 따라서 여기서부터는 체크박스 위젯이 현재 체크 되어 있는지 등 각 뷰의 상태값 체크 가능 View lifecycle owner 는 이때 INITIALIZED 상태에서 CREATED 상태로 변경됨을 알림.
- onStart()
: Fragment 가 사용자에게 보여질 수 있을 때 호출됨, 이는 주로 Fragment 가 attach 되어 있는 Activity 의 onStart() 시점과 유사함, FragmentManager 를 통해 FragmentTransaction 을 안전하게 수행 가능, Fragment 의 Lifecycle 이 STARTED 로 이동한 후에 Fragment View 의 Lifecycle 또한 STARTED 로 변환됨
- onResume()
: Fragment 가 보이는 상태에서 모든 Animator 와 Transition 효과가 종료됨, 프래그먼트가 사용자와 상호작용할 수 있을 때 onResume() 콜백이 호출됨, onStart() 와 마찬가지로 Activity 의 onResume() 시점과 유사함, 반대로 onResume() 이 호출되지 않은 시점에서는 입력을 시도하거나 포커스를 설정하는 등의 작업을 임의로 하면 안 된다는 것을 의미함.
- onPause()
: 사용자가 Fragment 를 떠나기 시작했지만 Fragment 는 여전히 visible 일 때 onPause() 가 호출됨, Fragment 와 View 의 Lifecycle 이 PAUSED 가 아닌 STARTED 가 됨 = lifecycle 에 PAUSE 와 STOP 에 해당하는 상태가 X
- onStop()
: Fragment 가 더이상 화면에 보여지지 않게 되면 Fragment 와 View 의 Lifecycle 은 CREATED 상태가 되고 onStop() 콜백 함수가 호출됨, 이 상태는 부모 액티비티나 프래그먼트가 중단됐을 뿐만 아니라 부모 액티비티나 프래그먼트의 상태가 저장될 때도 호출됨, API 28 버전을 기점으로 onSaveInstanceState() 함수와 onStop() 함수의 호출 순서가 달라짐
- onDestroyView()
: 모든 exit animation 과 transition 이 완료되고 Fragment 가 화면으로부터 벗어났을 경우 Fragment View 의 Lifecycle 은 DESTROYED 가 되고 onDestroy() 가 호출됨, 이 시점부터 getViewLifecycleOwnerLiveData() 의 리턴값으로 null 이 반환됨, 해당 시점에서는 가비지 컬렉터에 의해 수거될 수 있도록 Fragment View 에 대한 모든 참조가 제거되어야 함.
- onDestroy()
: Fragment 가 제거되거나 FragmentManager 가 destroy 됐을 경우 프래그먼트의 Lifecycle 은 DESTROYED 상태가 되고 onDestroy() 콜백 함수가 호출됨, 해당 지점은 Fragment Lifecycle 의 끝을 알림, onAttach() 가 onCreate() 이전에 호출 됐던 것처럼 onDetach() 또한 onDestroy() 이후에 호출됨.
'Android' 카테고리의 다른 글
(Android Studio) - 다국어 지원 설정, strings.xml (1) | 2024.04.03 |
---|---|
(Android Studio) - Fragment 데이터 전달 방식 (0) | 2024.04.01 |
(Android) - Activity Stack (1) | 2024.03.27 |
(Android Studio) - Activity 생명 주기 (0) | 2024.03.25 |
(Android Studio) Activity, Intent (1) | 2024.03.22 |