Fragment

하나의 화면 내에서 독립적으로 동작하는 화면 부분

Fragment

Fragment


하나의 액티비티 내에서 독립적으로 동작하는 화면 부분을 말한다.

액티비티는 독립적으로 화면을 표시하고 앱 내에서 독립적으로 실행될 수 있는 반면에, 프래그먼트는 액티비티에 종속되며, 액티비티 내에서 사용되어 화면을 나누는데 도움을 준다.

FragmentManager

프래그먼트의 추가, 삭제, 교체 등을 담당하는 클래스로, 호스트 액티비티에 프래그먼트를 연결하고 프래그먼트가 더 이상 사용되지 않으면 분리하는 역할을 한다.

프래그먼트의 생명주기는 호스트 액비비티 혹은 호스트 프래그먼트의 생명주기보다 앞설 수 없는데, 이러한 프래그래먼트의 트랜잭션을 안정적으로 처리할 수 있는 FragmentContainerView 를 사용하는 것이 권장된다.


Fragment LifeCycle


onAttach()

프래그먼트가 액티비티에 연결될 때 호출된다.

onCreate()

프래그먼트가 FragmentManager 에 추가되면 호출되며, 뷰는 생성되지 않은 상태이다.

onCreateView()

프래그먼트가 뷰를 그리기 위해 레이아웃을 Inflate 하는 작업을 수행할 때 호출되며, 뷰 객체를 반환한다.

InflateXML 에 정의된 레이아웃과 뷰의 속성을 읽어 실제 뷰 객체를 만드는 작업을 말한다.

onViewCreated()

onCreateView() 에서 생성된 뷰 객체를 전달 받으면 호출되고, 이 시점부터 뷰에 대한 작업을 처리할 수 있다.

onViewStateRestored()

저장된 뷰의 상태값이 프래그먼트의 뷰에 복원되었을 때 호출된다.

onStart()

프래그먼트가 화면에 보이기 직전에 호출되며, 이때부터 프래그먼트의 childFragmentManager 를 통해서 FragmentTransaction 을 안전하게 수행할 수 있다.

onResume()

프래그먼트가 사용자와 상호작용이 가능해지면 호출된다.

onPause()

프래그먼트가 사용자와 상호작용이 불가능해지면 호출된다.

onStop()

프래그먼트가 화면에서 완전히 보이지 않게 되면 호출되며, onSaveInstanceState() 보다 먼저 호출되기 때문에 FragmentTransaction 이 안전하게 수행되는 마지막 지점이다.

onSaveInstanceState()

생명주기 Callback 함수가 아니라 화면 회전과 같이 Configuration 변경이 발생했을 때 데이터를 저장하기 위해 사용하는 함수이다.

onDestoryView()

프래그먼트의 뷰가 제거되면 호출된다.

onDestory()

프래그먼트가 FragmentManager 에서 제거되면 호출된다.

onDetach()

프래그먼트가 액티비티에서 완전히 제거되면 호출된다.


Fragment A & B 의 동작


A 생성

A: onAttach
A: onCreate
A: onCreateView
A: onViewCreated
A: onViewStateRestored
A: onStart
A: onResume
  • A 프래그먼트가 생성되면서 프래그먼트의 생명주기대로 호출된다.

A → B 이동

A: onPause
A: onStop
B: onAttach
B: onCreate
B: onCreateView
B: onViewCreated
B: onViewStateRestored
B: onStart
B: onResume
A: onDestoryView
  • 프래그먼트 A 에서 onPause(), onStop() 이 호출되고, 프래그먼트 B 가 생성되면서 프래그먼트의 생명주기대로 호출된다.
  • 프래그먼트 B 가 사용자와 상호작용이 가능해져 onResume() 이 호출되면, 프래그먼트 A 에서 onDestoryView() 가 호출된다.
  • 액티비티에서는 A → B 로 이동할 때 액티비티 A 에서 onPause() 까지만 호출되고 액티비티 B 에서 상호작용이 가능해지면 onStop() 이 호출되었던 것과는 다르게, 프래그먼트에서는 onStop() 까지 한 번에 호출되는 것을 확인할 수 있다.

B → A 뒤로가기

B: onPause
B: onStop
A: onCreateView
A: onViewCreated
A: onViewStateRestored
A: onStart
A: onResume
B: onDestoryView
B: onDestory
B: onDetach
  • 프래그먼트 B 에서 onPause(), onStop() 이 호출되고 프래그먼트 A 에서 onCreateView() 부터 onResume() 까지 다시 호출된다.
  • 프래그먼트 A 가 다시 사용자와 상호작용이 가능해져 onResume() 이 호출되면, 프래그먼트 B 에서 onDestoryView(), onDestory(), onDetach() 를 호출하여 백스택에서 자신을 제거한다.


Fragment View LifeCycle


프래그먼트의 ViewLifeCycleOnweronCreateView() 에서 생성되는 뷰의 생명주기를 말하며, onCreateView() 부터 onDestoryView() 까지의 생명주기를 가진다.

essential