본문 바로가기

Mobile/Android

[Android] 안드로이드 Fragment 생명주기

프래그먼트 생명주기(Fragment Life Cycle)

 

  -  Fragment 는 Activity 의 특징 일부를 물려받은 독자적인 생명주기를 가지는 UI 컴포넌트

 

  -  그래서, Fragment의 생명주기는 Activity가 활성화된 상태(실행중인 상태)에서 작동

 

  -  프래그먼트에서 필수적으로 구현해야 하는 메서드는, onCreate(), onCreateView(), onPause()

 

 

프래그먼트 생명주기

 

 

  1.  onAttach()

 

    1)  액티비티에서 프래그먼트 추가 시 호출

 

    2)  인자로 context를 받아 -> Listener Interface를 Implement한 경우, Context를 통해 가져올 수 있음

 

 

  2.  onCreate()

 

    1)  onAttach() 다음으로 호출되는 함수

 

    2)  Activity의 onCreate() 함수와 유사한 역할 수행

 

    3)  UI에 관련된 작업 수행 불가  Ex) View, ViewGroup의 UI 바인딩 등

 

      -  onCreate()에서 view가 초기화중이기 때문에 충돌 가능

 

      -  몇 가지 View 들이 적절히 초기화 되어있지 않을 가능성 존재

 

      -  onCreate() 에서 레이아웃을 inflate 하지만, findViewByID 등을 사용해 초기화 X

 

      -  UI 관련 작업 외 변수 초기화 등의 작업 가능

 

 

  3.  onCreateView()

 

    1)  onCreate() 다음으로 호출되는 함수

 

    2)  이때부터 Fragment에 속한 UI 관련 작업 수행 가능

 

  ->  Activity의 onCreate 기능을 Fragment 에서는 onCreate() - onCreateView() 두 가지로 분리

 

    3)  View가 완전히 생성되었을 때 호출되는 onCreateView() 메서드에서 findViewById 를 사용해 View 초기화

 

 

  4.  onActivityCreated()

 

    1)  onCreateView() 다음으로 호출되는 함수

 

    2)  Frament가 backStack에서 돌아오면 호출되는 함수

 

    3)  Activity에서 Fragment 생성이 완료되면 호출되는 함수 

 

 

  5.  onStart()

 

    1)  onActivityCreated() 다음으로 호출되는 함수

 

    2)  Activity와 마찬가지로, 이 시점부터 사용자가 액티비티 볼 수 있음

 

 

  6.  onResume()

 

    1)  onStart() 다음으로 호출되는 함수

 

    2)  이 시점부터는, Fragment가 활성화된 상태(실행중인 상태)로 간주      

 

 

  7.  onPause()

 

    1)  Fragment의 호스트 Activity가 포커스를 잃고, 다른 Activity가 최상단에 보여지는 경우에 호출되는 함수

 

    2)  1) 번과 같은 상황에서, Fragment가 backStack 으로 들어감

 

 

  8.  onStop()

 

    1)  onPause() 상태 + Activity가 완전히 보여지지 않는 경우 호출

 

    2)  화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지 가능

 

      -  앱이 사용자에게 보여지지지 않는 동안 필요하지 않는 리소스를 해제하거나 조정

 

      -  CPU를 많이 소모하는 작업 종료

 

    3)  액티비티 또는 프래그먼트가 정지되면 - 시스템이 onSaveInstanceState()를 호출

 

     -> 간단하고 가벼운 UI상태를 저장 -> 재정의하여 사용 가능

 

 

  9.  onDestroyView()

 

    1)  Fragment에 구현된 View가 제거되는 단계

 

    2)  onDestroyView() 메서드 호출 이후 Fragment가 BackStack에서 돌아오면, onCreateView()가 호출

 

 

  10.  onDestroy()

 

    1)  Fragment를 완전히 제거하기 직전

 

  ->  Activity의 onDestroy 기능을 Fragment 에서는 onDestroy() - onDestroyView() 두 가지로 분리

 

 

  11.  onDetach()

 

    1)  Fragment 제거 -> Activity로부터 해제될 때 호출

 

 

 

Activity 생명주기와 Fragment 생명주기

 

  1.  액티비티와 프래그먼트 생명주기에서 차이점 - BackStack 저장 방식

 

    1)  액티비티 : 정지되면, 시스템에서 관리하는 액티비티의 BackStack에 들어감

 

    2)  프래그먼트 : 프래그먼트를 제거하는 트랜잭션에서, addToBackStack()을 호출하여

 

         인스턴스 저장을 명시적으로 요청할 경우에만 액티비티에서 관리하는 BackStack으로 들어가게 됨

 

 

Activity와 Fragment 생명주기

 

 

 

참고

 

  -  https://ddangeun.tistory.com/50

 

  -  https://velog.io/@eun3673/application-fundamentals-lifecycle