본문 바로가기
내일배움캠프 (스파르타 코딩 클럽) 안드로이드 2기/TIL

Fragment LifeCycle 프래그먼트 수명 주기

by 키윤 2023. 12. 14.

Fragment 인스턴스: 

  • 고유한 수명 주기를 갖는다.
  • 사용자가 앱을 탐색하거나 상호작용할 때 프래그먼트는 화면에서 추가/삭제 되거나 화면에 들어가고 나오면서 수명 주기의 여러 상태 간에 전환하게 됩니다.
  • 수명 주기를 관리하기 위해 LifeclycleOwner 구현 -> getLifecycle() 메서드를 통해 액세스할 수 있는 Lifecycle 객체 노출

INITIALIZED
CREATED
STARTED
RESUMED
DESTROYED

  1. INITIALIZED 상태에서 시작
  2. 프래그먼트의 나머지 수명 주기를 전환할 수 있도록 프래그먼트를 FragmentManager에 추가
  3. FragmentManager은 프래그먼트의 상태 확인 후 다음 상태로 전환시

 

프래그먼트에서 최소한으로 구현해야 하는 3개의 생명주기 메서드:

  • onCreate: 프래그먼트 생성할 때 호출. 프래그먼트가 일시정지/중단 후 재개 되었을 때 유지하고 있어야 하는 것을 여기서 초기화.
  • onCreateView: 프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출. View반환. 이 메서드는 프래그먼트 레이아웃 루트이기 때문에 UI를 제공하지 않으면 null 반환
  • onPause: 사용자가 프래그먼트를 떠나면 첫번 째로 이 메서드 호출. 사용자가 돌아오지 않을 수도 있으므로 여기에 현재 사용자가 세션을 넘어 지속되어야 하는 변경사항 저장.

Activity와 동일한 메서드

  • onStart: 액티비티가 시작하면 이 메소드 호출. 사용자에게 프래그먼트가 보이게 되고, 이 메서드에서 UI를 관리하는 코드 초기화. 완료되면 Resumed상태로 들어가 onResume 메서드 호출.
  • onResume: 사용자와 상호작용. 어떤 이벤트가 발생하여 포커스가 떠날 때 까지 이 상태에 머무릅니다. 프로그램이 일시정지 되어 onPause 호출하고 다시 재개되면 onResume 메서드 다시 호출. 재개 상태로 전환될 때마다 필요한 초기화 작업들을 수행해야 함.
  • onStop: 다른 액티비티가 완전히 화면을 가리게 되면 호출. 여기에서 화면에 보이지 않을 때 실행할 필요가 없는 기느을 모두 정지할 수 있다. 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 헤제하거나 조정함. onPause 대신에 onStop을 사용하면 사용자가 멀티 윈도우 모드에서 액티비티ㅇ를 보고 있더라도 UI관련 작업이 계속 지속 진행. 또한 onStop()을 사용하여 CPU를 많이 소모하는 종료작업을 실행해야 합니다. 예를 들면 그 작업은 데이터 베이스에 저장할 시기가 될 수 도 있다.
    액티비티가 중단되면 액티비티 객체는 메모리 안에 머무른다. 이 객체가 모든 상태 및 멤버 정보를 가지고 관리하지만 연결되 있지는 않다. 다시 시작되면 이 객체를 다시 호출. 최상위 상태가 재개되어도 콜백 메서드 중에 생성된 요소는 다시 초기화할 필요가 없다. 또한 시스템은 레이아웃에 있는 각 View 객체의 현재 상태도 기록하므로 사용자가 EditText 위젯에 텍스트를 입력했다면 내용이 저장되기 때문에 저장, 복원할 필요가 없다. Activity 생명주기에서는 이상태에서 다시 시작하면 onRestart()를 호출합니다. 또한 실행을 종료하면 onDestroy()를 호출.
  • onDestroy(): Activity 또는 Fragment가 소멸되기 전에 호출. 사용자가 Activity를 완전히 닫거나 구성변경으로 인해(기기회전 또는 멀티 윈도우 모드) 시스템이 일시적으로 소멸시키는 경우에도 호출. 여기에서는 이번 콜백 메서드(onStop()등)에서 해제되지 않은 리소스들을 해제해야 한다.