Fragment는 FragmentActivity내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타낸다. Fragment는 자체적인 수명주기(Lifecycle)를 가지며 자체 입력 이벤트를 수신하고, 액티비티 실행 중에 추가 및 삭제가 가능하다.
다른 액티비티에서 재사용할 수 있는 “하위 액티비티”와 같은 개념이다.
Fragment를 사용하는 이유
- 개발자가 뷰 계층에 복잡한 변경 내용을 관리하지 않아도 태블릿과 같은 큰 화면에서 역동적이고 유연한 UI디자인을 구현할 수 있다.
- 액티비티의 레이아웃을 여러 Fragment로 나누면 런타임에서 액티비티의 외관을 수정할 수 있다.
- 액티비티의 변경 내용을 액티비티가 관리하는 백 스택에 보존할 수 있다.
- 하나의 Fragment를 여러 액티비티에 포함할 수 있다. 따라서 재사용성을 염두에 두고 디자인해야 하며, 하나의 프래그먼트를 다른 프래그먼트에 직접 조작하는 것인 삼가야한다. → 이 부분에 대한 예시는 공식문서의 디자인 철학에 설명되어있다.
- Fragment의 조합을 여러가지 화면 크기에 맞춰 변경할 수 있다.
Fragment의 생명주기
Android developer 사이트에 설명되어 있는 프래그먼트 라이프사이클은 아래와 같다.
프래그먼트 라이프 사이클의 호출 순서는 다음과 같다.
먼저 액티비티의 onCreate()가 호출 된 후, 아래의 차례대로 호출된다.
onAttach() → onCreate() → onCreateView() → onActivityCreated() → onStart() → onResume() → onPause() → onStop() → onDestroyView() → onDestroy() → onDetach()
각 생명주기별 호출 함수 설명
1. onAttach()
- 프래그먼트가 액티비티에 붙을 때 호출된다.
- 인자로 Context가 주어진다.
2. onCreate()
- 프래그먼트가 액티비티의 호출을 받아 생성된다.
- Bundle로 액티비티로부터 데이터가 넘어온다.
- UI 초기화는 불가능하다.
3. onCreateView()
- 레이아웃 inflate를 담당한다.
- savedInstanceState로 이전 상태에 대한 데이터를 제공한다.
- View와 관련된 객체를 초기화할 수 있다.
4. onViewCreated()
- onCreatedView()를 통해 반환된 View객체는 onViewCreated()의 파라미터로 전달된다.
- 이 때, Lifecycle이 INITIALIZED 상태로 업데이트가 된다.
- 때문에 View의 초기값 설정, LiveData 옵저빙, RecyclerView, ViewPager2에 사용될 Adapter 세팅은 이 메소드에서 해주는 것이 적절하다.
5. onViewStateRestored()
- 저장해둔 모든 state값이 Fragment의 View의 계층구조에 복원되었을 때 호출된다.(ex- 체크박스 위젯이 현재 체크되어 있는지 여부)
- View Lifecycle owner: INITIALIZED → CREATED 변경
6. onStart()
- 사용자에게 보여질 수 있을 때 호출
- Activity의 onStart() 시점과 유사
- Fragement의 childFragmentManager을 통해 FragmentTransaction을 안전하게 수행할 수 있다.
- View lifecycle owner : CREATED → STARTED로 변경된다.
7. onResume()
- 사용자와 프래그먼트가 상호작용 할 수 있는 상태일 때 호출된다.
- Fragment가 보이는 상태에서 모든 Animator와 Transition 효과가 종료되고, 프래그먼트와 사용자가 상호작용 할 수 있을 때 onResume Callback
8. onPause()
- Fragment가 visible일 때, onPause()가 호출된다.
- 이 때, Fragment와 View의 Lifecycle이 PAUSED가 아닌, STARTED가 된다.
9. onStop()
- Fragment가 더 이상 화면에 보여지지 않게 되면 onStop() callback을 호출한다.
- 부모 액티비티, 프래그먼트가 중단될 때, 상태가 저장될 때 호출된다.
- View와 Lifecycle: STARTED → CREATED
- API 28버전을 기점으로 onSaveInstanceState()함수와 onStop() 함수 호출 순서가 달라진다. 따라서 onStop()이 FragmentTransation을 안전하게 수행하는 마지막 지점이 된다.
10. onDestroyView()
- 모든 exit animation, transaction이 완료되고 Fragment가 화면으로부터 벗어났을 경우 호출된다.
- view와 Lifecycle: CREATED → DESTROYED
- 가비지 컬렉터에 의해 수거될 수 있도록 Fragment View에 대한 모든 참조가 제거되어야한다.
- getViewLifecycleOwnerLiveData()
11. onDestroy()
- Fragment가 제거되거나, FragmentManager가 destory됐을 경우, onDestroy() Callback함수 호출.
- Fragment Lifecycle의 끝을 알린다.
12. onDetach()
- 프래그먼트가 액티비티로부터 해제되어질 때 호출된다.
Uploaded by
N2T'Android > Basic' 카테고리의 다른 글
[Android: Jetpack] 안드로이드 AAC(Android Architecture Components) 간략한 정리 (0) | 2022.12.31 |
---|---|
[Android: Jetpack] ViewBinding 기초 (0) | 2022.12.31 |
Fragment Lifecycle 예제 (0) | 2022.12.31 |
액티비티(Activity) (1) | 2022.12.31 |
안드로이드 구성요소 (0) | 2022.12.31 |