[ 앱 개발자 도전기 : 안드로이드 ] 안드로이드의 Fragment LifeCycle ( 프래그먼트 생명주기 )

0

App_Dev : Android.

목록 보기
6/11
post-thumbnail

[ 앱 개발자 도전기 : 안드로이드 ] 안드로이드의 Fragment LifeCycle ( 프래그먼트 생명주기 )

∇ 안드로이드 Fragment LifeCycle

목   차

1. onAttach()
2. onCreate()
3. onCreateView()
4. onViewCreated()
5. onViewStateRestored()
6. onStart()
7. onResume()
8. onPause()
9. onStop()
10. onDestoryView()
11. onDestory()
12. onDetach()

★ 프래그먼트 생명주기란?

√ '프래그먼트'는 안드로이드 앱에서 UI의 재사용 가능한 부분을 나타내는 컴포넌트로 자체적인 생명주기를 가집니다.

√ '프래그먼트'의 생명주기는 액티비티의 생명주기와 매우 유사하며, 호스트 액티비티의 생명주기에 직접적인 영향을 받습니다.

★ 프래그먼트 생명주기 주요 특징.

종속성 : 프래그먼트는 항상 Activity 내에서 호스팅되어야 합니다.

상태 변화 : 프래그먼트는 (Resumed, Paused, Stopped ) 3가지 주요 상태로 존재할 수 있습니다.

★ 프래그먼트 생명주기 콜백 메서드.

◎ 생성 단계.

      1. onAttach(): 프래그먼트가 액티비티에 연결될 때 호출됩니다
      2. onCreate(): 프래그먼트가 생성되며, UI 초기화는 불가능합니다
      3. onCreateView(): 프래그먼트의 레이아웃을 인플레이트하고 뷰를 생성합니다
      4. onViewCreated(): 뷰 객체가 생성된 후 호출되며, 뷰 초기화에 적합한 메서드입니다.
              

◎ 실행 단계.

     5. onStart(): 프래그먼트가 사용자에게 보이기 시작할 때 호출됩니다
     6. onResume(): 프래그먼트가 사용자와 상호작용할 수 있는 상태일 때 호출됩니다

◎ 중단 단계.

    7. onPause(): 프래그먼트가 부분적으로 가려지거나 포커스를 잃을 때 호출됩니다.
    8. onStop(): 프래그먼트가 더 이상 화면에 보이지 않을 때 호출됩니다

◎ 소멸 단계.

    9. onDestroyView(): 프래그먼트와 연결된 뷰 레이어가 제거될 때 호출됩니다.
    10. onDestroy(): 프래그먼트가 완전히 소멸되기 직전에 호출됩니다.
    11. onDetach(): 프래그먼트가 액티비티로부터 분리될 때 호출됩니다.

※ 중요 고려사항.

  • 프래그먼트의 생명주기는 호스트 액티비티의 생명주기에 직접적인 영향을 받습니다.
  • 액티비티가 일시정지되면, 내부의 모든 프래그먼트도 일시정지됩니다.
  • 프래그먼트는 addToBackStack()메서드를 통해 백 스택에 저장될 수 있습니다.

이전 포스팅에 이어서 프래그먼트 생명주기를 정리해 보았습니다.
액티비티와 별개로 자체 생명 주기를 가지고 있지만,
액티비티의 생명주기와 유기적으로 연관되어 있습니다.

◎ 생성 단계.

Ⅰ. onAttach()

  • 프래그먼트가 액티비티에 붙을 때 호출.
  • 인자로 'Context'가 주어집니다.

Ⅱ. onCreate()

  • 프래그먼트가 액티비티의 호출을 받아 생성
  • Bunddle로 액티비티로부터 데이터가 넘어옴.
  • UI 초기화는 불가능.

Ⅲ. onCreateView()

  • 레이아웃 inflate 담당.
  • savedInstanceState로 이전 상태에 대한 데이터 제공.

Ⅳ. onViewCreated()

  • onCreateView()를 통해 반환된 View 객체는 onViewCreated()의 파라미터로 전달됩니다.
  • 이 때 Lifecycle이 INITIALIZED 상태로 업데이트가 됩니다.
  • 때문에 View의 초기값 설정, LiveData 옵저빙, RecyclerView, ViewPager2에 사용될 Adapter 세팅은 이 메소드에서 해주는 것이 적절합니다.

Ⅴ. onViewStateRestored()

  • 저장해둔 모든 state 값이 Fragment의 View의 계층 구조에 복원되었을 때 호출됩니다.
    ex) 체크박스 위젯이 현재 체크되어 있는가?
  • View lifecycle owner
    : INITIALIZED -> CREATED 변경.

◎ 실행 단계.

Ⅵ. onStart()

  • 사용자에게 보여질 수 있을 때 호출.
  • Activity의 onStart() 시점과 유사.
  • Fragment의 childFragmentManager를 통해 FragmentTransaction을 안전하게 수행 가능.
  • View lifecycle owner : CREATED -> STARTED 변경.

Ⅶ. onResume()

  • 사용자와 프래그먼트가 상호작용 할 수 있는 상태일 때 호출.
  • Fragment가 보이는 상태에서 모든 Animator와 Transition 효과가 종료되고,
    프래그먼트와 사용자가 상호작용 할 수 있을 때 onResume Callback

◎ 중단 단계.

Ⅷ. onPause()

  • **Fragment가 visivle 일 때 onPause()가 호출.
  • 이 때 Fragment와 View의 Lifecycle이 PAUSED가 아닌 STARTED가 됨.

Ⅸ. onStop()

  • Fragment가 더 이상 화면에 보여지지 않게 되면 onStop() 콜백 호출.
  • 부모 액티비티, 프래그먼트가 중단될 때, 상태가 저장될 때 호출.
  • View와 Lifecycle : STARTED -> CREATED

◎ 소멸 단계.

Ⅹ. onDestroyView()

  • 모든 exit animation, transaction이 완료되고 Fragement가 화면으로부터 벗어났을 경우 호출.
  • view와 lifecycle : CREATED -> DESTROYED
  • 가비지 컬렉터에 의해 수거될 수 있도록 Fragment View에 대한 모든 참조가 제거되어야 함.
  • getViewLifecycleOwnerLiveData()

ⅩⅠ. onDestroy()

  • Fragment가 제거되거나, FragmentManager가 destroy 됐을 경우, onDestroy() 콜백 함수가 호출
  • Fragment Lifecycle의 끝을 알림

ⅩⅡ. onDetach()

  • 프래그먼트가 액티비티로부터 해제되어질 때 호출됩니다.

0개의 댓글

관련 채용 정보