ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] Fragment LifeCycle
    안드로이드 2022. 1. 12. 14:29
    728x90
    반응형

    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 LifeCycle

     

    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을 안전하게 수행할 수 있는 마지막 지점이 되었습니다.

    onStop() 변경 사항

    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/lifecycle
    728x90
    반응형

    댓글

Designed by ZibroTistory.