[Android] Fragment Lifecycle

이도연·2024년 1월 25일
0

android studio

목록 보기
22/28

onAttach(), onCreate()

Fragment CREATED

앱이 Created 상태일 때, Fragment 는 FragmentManager 에 추가되며 onAttach() 와 onCreate() 가 차례대로 호출된다.

onAttach() 에서는 Fragment 가 Host Activity 에 Attach 되고, onAttach() 에서 작업이 성공적으로 이루어지면
onCreate() 에서 Fragment 가 생성된다.

이때 Fragment View 는 아직 생성되지 않은 상태이므로, View 와 관련된 작업을 onCreate() 내부에 하는 것은 x.


onCreateView(), onViewCreated()

Fragment CREATED and View INITIALIZED

onCreateView()에서 Fragment View 가 초기화된 후, View 객체를 반환한다.
이때 레이아웃을 inflate 하기 때문에 View Binding 을 사용해서 다른 View 들을 참조할 수도 있지만, 종종 레이아웃이 제대로 초기화 되지 않을 수 있다.

onViewCreated()는 onCreateView() 에서 정상적인 Fragment View 객체가 반환된 직후 호출되며 View 가 완전히 생성되었음을 보장한다. 따라서, View 에 대한 참조 및 작업은 View 가 완전히 생성된 이후인 onViewCreated() 에서 하는 것이 더 안전하다.



onViewStateRestored()

Fragment and View CREATED

onViewStateRestored()은 저장해둔 state 값이 Fragment View 의 계층구조에 복원되었을 때 호출된다. 따라서 각 View 의 state 값을 체크할 수 있다. (ex.체크박스가 현재 체크되어있는지)

onStart() ~ onDesonStart() ~ onDestroy() (onDestroyView() 제외) 까지는 액티비티의 생명주기와 유사하다.



onStart()

Fragment and View STARTED

사용자에게 Fragment 가 보이게 된다. childFragmentManager 를 통해 FragmentTransaction 을 안전하게 수행한다.

Activity 또는 Fragment 에 container를 배치하고, container에 Fragment를 추가/교체/삭제하는 작업을 코드를 통해 수행할 수 있다. 이러한 작업을 위해서 Fragment Manager와 Fragment Transaction이 필요하다.
Fragment Manager는 백 스택을 관리하고 프래그먼트 트랜잭션을 생성한다.
Fragment Transaction은 프래그먼트를 추가/교체/삭제하는 작업을 제공합니다.



onResume()

Fragment and View RESUMED

사용자와 Fragment 가 상호작용을 할 수 있는 상태이다. Fragment 가 보이는 상태에서 모든 Animator 와 Transition 효과가 종료된 후 호출된다.



onPause()

Fragment and View STARTED

사용자가 Fragment 를 떠났지만 기존 Fragment 가 조금이라도 보일 때 호출된다. 이때 Fragment 와 Fragment View 의 생명주기는 PAUSED 가 아닌 STARTED 상태가 된다.



onStop()

Fragment and View CREATED

Fragment 가 더이상 보이지 않을 때 호출된다. onStop() 은 HostActivity 나 Fragment 가 중단되었을 뿐만 아니라, 이들의 상태가 저장될 때도 호출된다. API 레벨 28 이후 onSaveInstanveState() 와 onStop() 호출 순서가 달라졌고, 따라서 onStop() 이 FragmentTransaction 을 안전하게 수행하는 마지막 지점이 되었다.



onDestroyView(), onDetach()

Fragment CREATED and View DESTROYED

onDestroyView()는 Fragment 의 View 가 소멸될 시 호출된다. 이떄 Fragment 자체는 아직 메모리에 남아있다. Fragment View 에 대한 모든 참조를 제거해야 메모리 누수를 방지할 수 있다. 따라서 만약 View Bindging 을 사용하고 있다면 onDestroyView()에서 binding 변수를 null로 만들어 주는 것이 좋다(사실 View Binding을 안전하게 해제하기 위해선 이 방법 말고 다른 방법을 사용하는 것이 좋다.)

onDetach()는 Fragment 가 Host Activity에 더 이상 연결되어 있지 않을 때 호출된다.



onDestroy()

Fragment DESTROYED

onDestroy()는 Fragment 또는 Fragment Manager 가 소멸되었을 경우 호출된다. onDestroy() 가 호출되었다는 것은 Fragment 의 생명주기도 종료되었다는 것을 의미한다.

참조

0개의 댓글