Android

(Android Studio) - Fragment LifeCycle

돗개진 2024. 4. 1. 09:51

Fragment 의 LifeCycle

 

[ 액티비티의 생명주기와 차이점 ]

- 생성 시 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() 이후에 호출됨.