-
[Android] Fragment LifeCycle안드로이드 2022. 1. 12. 14:29728x90반응형
Fragment란?
Fragment는 앱 UI의 재사용 가능한 부분을 나타냅니다. Fragment는 자체 Layout을 정의 및 관리하고 자체 생명주기를 가지며 자체 입력 이벤트를 처리할 수 있습니다. Fragment는 단독으로 존재할 수 없으며 Activity 또는 다른 Fragment에서 호스팅 해야 합니다. Fragment의 View 계층은 호스트의 View 계층의 일부가 되거나 연결됩니다.
Fragment LifeCycle
Fragment 인스턴스에는 고유한 수명 주기가 있습니다. 사용자가 앱을 탐색하고 상호작용할 때 프래그먼트는 추가, 제거, 화면 진입 또는 종료에 따라 수명 주기의 다양한 상태로 전환됩니다. 수명 주기를 관리하기 위해 Fragment는 LifecycleOwner를 구현하여 getLifecycle() 메서드를 통해 액세스 할 수 있는 Lifecycle 객체를 노출합니다.
LifecycleObserver를 사용하는 대신 Fragment 클래스에는 프래그먼트 수명 주기의 각 변경 사항에 해당하는 콜백 메서드가 포함되어 있습니다. 여기에는 onCreate(), onStart(), onResume(), onPause(), onStop() 및 onDestroy()가 포함됩니다.
Fragment Callback Method
onAttach()
- Fragment가 액티비티에 붙을 때 호출됩니다.
- 아직 Fragment가 완벽하게 생성된 상태는 아니며, 인자로 context가 주어집니다.
onCreate()
- Activity와 마찬가지로 초기화해야하는 리소스들을 여기서 초기화합니다.
- Fragment를 생성하면서 넘겨준 값들이 있다면, 여기서 변수에 넣어주면 됩니다.
- UI는 초기화 할 수 없습니다.
- 본격적으로 Fragment가 Activity에 호출을 받아 생성되는 시점입니다.
- Activity의 onCreate()에선 view나 ui관련 작업을 할 수 있으나, Fragment의 onCreate()에서는 할 수 없습니다.
onCreateVIew()
- Layout을 Inflate하는 곳입니다. (Inflate : xml에 써져 있는 view의 정의를 실제 view 객체로 만드는 역할)
- View 객체를 얻을 수 있으므로, Button이나 TextView 초기화 같은 UI 바인딩 작업을 할 수 있습니다.
- Fragment가 자신의 인터페이스를 처음 그리기 위해 호출합니다.
- onCreateView의 매개 변수로 전달되는 container가 Activity의 ViewGroup이며, 여기에 Fragment가 위치하게 됩니다.
- 다른 매개 변수인 savedInstanceState는 Bundle 객체로 Fragment가 재개되는 경우 이전 상태에 대한 데이터를 제공합니다.
onViewCreated()
- onCreateView()에서 반환된 View객체는 onViewCreated() 파라미터로 전달됩니다.
- 이 메서드에서는 View의 초기값 설정, LiveData 옵저빙, RecyclerView 또는 ViewPager에 사용될 Adapter세팅 등을 해주게 됩니다.
onViewStateRestored()
- 이 메서드는 저장해둔 모든 State 값이 Fragment의 View의 계층 구조에 복원됐을 때 호출됩니다. (ex : CheckBox가 현재 체크되어 있는지의 상태 값 체크)
- View LifeCycle Owner는 이때 INITIALIZED 상태에서 CREATED 상태로 변경됐음을 알립니다.
onStart()
- Fragment가 사용자에게 보여질 수 있을 때 호출됩니다. (해당 Fragment가 attach 되어 있는 Activity의 onStart() 시점과 유사)
- Fragment의 child FragmentManager를 통해 FragmentTransaction을 안전하게 수행할 수 있습니다.
onResume()
- Fragment가 보이는 상태에서 모든 Animator와 Transition효과가 종료되고, Fragment가 사용자와 상호작용할 수 있을 때 이 콜백이 호출됩니다. (Activity의 onResum() 시점과 유사)
- Activity와 마찬가지로 이벤트가 발생하며 Fragment가 가려지기 전까지 이 상태가 유지됩니다.
onPause()
- 사용자가 Fragment를 떠나기 시작했지만 Fragment는 여전히 visible일때부터 onPause()가 호출됩니다.
- UI 관련 처리를 정지하고, 중요한 데이터를 저장합니다.
onStop()
- Fragment가 완전히 가려져 더 이상 화면에 보이지 않는 경우, 실행됩니다.
- 이 콜백은 부모 Activity나 Fragment가 중단됐을 뿐만 아니라, 부모 Activity나 Fragment의 상태가 저장될 때도 호출됩니다.
- Fragment의 onStop()은 API 28 버전을 기점으로 onSaveInstanceState() 함수와 onStop() 함수 호출 순서가 달라졌습니다. 아래 사진처럼 API 28버전부터 onStop()이 onSaveInstanceState() 함수보다 먼저 호출되어 onStop()이 FragmentTransaction을 안전하게 수행할 수 있는 마지막 지점이 되었습니다.
onDestroyView()
- Fragment와 관련된 View가 제거될 때 실행됩니다.
- Activity에서 Fragment 생성 시 addToBackStack()를 요청했을 경우 onDestroy()를 호출하지 않고 인스턴스가 저장되어 있다가 Fragment를 다시 부를 때 onCreateView()를 실행하여 다시 화면에 보이게 합니다.
onDestory()
- view가 제거된 후 Fragment가 완전히 소멸되기 전에 호출된다
반응형참고
https://jinee0717.tistory.com/44
https://readystory.tistory.com/199
https://developer.android.com/guide/fragments/lifecycle728x90반응형'안드로이드' 카테고리의 다른 글
[Android] SwipeRefreshLayout과 ScrollView 동시 사용시 문제 (0) 2022.01.24 [Android] Kotlin의 coroutine (0) 2022.01.20 [Android] Activity Life Cycle (0) 2022.01.11 [Android] API Key값 관리 (0) 2022.01.04 [Android] 안드로이드 4대 컴포넌트 (0) 2022.01.03