[Android] Fragment 생명주기

Subeen·2023년 12월 17일
0

Android

목록 보기
21/71

Fragment란?

Fragment는 FragmentActivity 내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타낸다. 여러 개의 프래그먼트를 하나의 액티비티에 결합하여 창이 여러 개인 UI를 빌드할 수 있으며, 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있다. 프래그먼트는 액티비티의 모듈식 섹션이라고 생각하면 된다. 이는 자체적인 수명 주기를 가지고, 자체 입력 이벤트를 수신하고, 액티비티 실행 중에 추가 및 삭제가 가능하다.

프래그먼트 생성

  • Fragment 클래스에는 Activity와 아주 유사해 보이는 코드가 있는데 여기에는 액티비티와 비슷한 콜백 메서드가 들어 있다.
  • onCreate(), onStart(), onPause() 및 onStop() 등이다.

  • 최소한 다음과 같은 수명 주기 메서드를 구현해야 한다.

onCreate()

  • 프래그먼트를 생성할 때 시스템에서 이것을 호출한다.
  • 구현내에서 프래그먼트의 기본 구성 요소 중 프래그먼트가 일시정지 되거나 중단되었다가 재개되었을 때 유지하고자 하는 것을 초기화해야 한다.

onCreateView()

  • 시스템은 프래그먼트가 자신의 사용자 인터페이스를 처음으로 그릴 시간이 되면 이것을 호출한다.
  • 프래그먼트에 맞는 UI를 그리려면 메서드에서 View를 반환해야 한다.
  • 이 메서드는 프래그먼트 레이아웃의 루트이며 프래그먼트가 UI를 제공하지 않는 경우 Null을 반환하면 된다.

onPause()

  • 시스템이 이메서드를 호출하는 것은 사용자가 프래그먼트를 떠난다는 것을 나타내는 첫 번째 신호이다.
  • 여기에 현재 사용자 세션을 넘어서 지속되어야 하는 변경 사항을 커밋한다.

프래그먼트 수명 주기 처리

  • 프래그먼트는 세 가지 상태로 존재할 수 있다.
상태설명
재개됨 (Resumed)프래그먼트가 실행 중인 액티비티에 표시됨
일시정지됨 (Paused)다른 액티비티가 포그라운드에 있고 포커스를 갖고 있지만 이 프래그먼트가 있는 액티비티도 여전히 표시됨
정지됨 (Stopped)프래그먼트가 보이지 않음

액티비티 수명 주기와의 조화

프래그먼트가 있는 액티비티의 수명 주기는 해당 프래그먼트의 수명 주기에 직접적인 영향을 미친다. 액티비티에 대한 각 수명 주기 콜백이 각 프래그먼트에 대한 비슷한 콜백을 방생시킨다. 예를 들어 액티비티가 onPause()를 받으면 해당 액티비티 내의 각 프래그먼트가 onPause()를 받는다.

  • 프래그먼트에는 프래그먼트의 UI를 빌드하고 소명 시키는 등의 같은 작업을 수행하기 위해 액티비티와 고유한 상호 작용을 처리하는 몇 가지 수명 주기 콜백이 더 있다.

onAttach()

  • 프래그먼트가 액티비티와 연결되어 있었던 경우 호출된다. (여기에서 Activity가 전달된다.)

onCreate()

  • Fragment만 생성 된 상태이다.
  • FragmentManager에 add 됐을 때 onCreate() 메서드를 호출한다.
  • onCreate() 이전에 onAttach()가 먼저 호출되며 이 시점에는 Fragment View가 생성되지 않았기 때문에 Fragment의 View와 관련된 작업을 두기에 적절하지 않다.

onCreateView(), onViewCreated()

  • 프래그먼트와 연결 된 뷰 계층을 생성하기 위해 호출된다.
  • onCreate() 이후에는 onCreateView()와 onViewCreated() 메서드가 이어서 호출된다.
  • onCreateView()의 반환 값으로 정상적인 FRagment View 객체를 제공했을 때만 Fragment View의 LifeCycle이 생성된다.

onStart()

  • Fragment가 사용자에게 보여질 수 있을 때 호출된다.
  • Fragment가 Attach 되어 있는 Activity의 onStart() 시점과 유사하다.
  • 이 시점부터는 Fragment의 Child FragmentManager를 통해 FragmentTransaction을 안전하게 수행할 수 있다.

onResume()

  • Fragment가 보이는 상태에서 모든 Animator와 Transition 효과가 종료되고 프래그먼트가 사용자와 상호작용할 수 있을 때 onResume() 메서드가 호출된다.
  • onStart()와 마찬가지로 Activity의 onResume() 시점과 유사하다.

onPause()

  • 사용자가 Fragment를 떠나기 시작했지만 Fragment는 여전히 visible일 때 onPause() 메서드가 호출된다.

onStop()

  • Fragment가 더 이상 화면에 보여지지 않게 되면 onStop() 메서드를 호출된다.
  • 부모 액티비티나 프래그먼트가 중단 되거나 상태가 저장 될 때도 호출된다.

onDestroyView()

  • 프래그먼트와 연결 된 뷰 계층이 제거되는 중일 때 호출된다.

onDestroy()

  • 프래그먼트가 제거되거나 FragmentManager가 Destroy 됐을 경우 onDestroy() 메서드가 호출된다.

onDetach()

  • 프래그먼트가 액티비티와 연결이 끊어지는 중일 때 호출된다.

프래그먼트

profile
개발 공부 기록 🌱

0개의 댓글