728x90

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

 

프래그먼트 및 프래그먼트 관리자

프래그먼트는 인스턴스화되면 INITIALIZED 상태에서 시작됩니다. 프래그먼트가 프래그먼트의 나머지 수명 주기를 전환하도록 하려면 프래그먼트를 FragmentManager에 추가해야 합니다. FragmentManager가 프래그먼트가 어떤 상태여야 하는지 확인한 다음 그 상태로 전환하는 일을 담당합니다.

프래그먼트 수명 주기를 벗어나면 FragmentManager는 프래그먼트를 호스트 활동에 연결하고 프래그먼트가 더 이상 사용되지 않을 때는 프래그먼트를 분리하는 작업도 합니다. Fragment 클래스에는 두 가지 콜백 메서드 onAttach()와 onDetach()가 있습니다. 이러한 메서드는 관련 이벤트 중 하나가 발생했을 때 작업을 위해 재정의할 수 있습니다.

onAttach() 콜백은 프래그먼트가 FragmentManager에 추가되었을 때 호스트 활동에 연결되면 호출됩니다. 이 시점에 프래그먼트는 활성 상태이며 FragmentManager가 수명 주기 상태를 관리하고 있습니다. 이 시점에서 findFragmentById() 같은 FragmentManager 메서드가 이 프래그먼트를 반환합니다.

onAttach()는 항상 수명 주기 상태 변경 전에 호출됩니다.

onDetach() 콜백은 프래그먼트가 FragmentManager에서 삭제되었을 때 호스트 활동에서 분리되면 호출됩니다. 프래그먼트가 더 이상 활성 상태가 아니므로 findFragmentById()를 사용하여 더 이상 검색할 수 없습니다.

onDetach()는 수명 주기 상태 변경 후에 항상 호출됩니다.

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

출처 - https://developer.android.com/guide/fragments/lifecycle?hl=ko

 

 

 

 

 

콜백 

onAttach() 

  • 프래그먼트가 액티비티에 붙여질 때 호출된다. 
    • 인자로 Context가 주어진다.

onCreated()

  • 프래그먼트가 생성될 때 호출된다. 
    • FragmentManager에 add될 때 호출된다.
    • Bunddle로 액티비티로부터의 데이터가 넘어온다. UI 초기화 불가능

onCreateView()

  • onCreated() 이후 바로 호출된다.
    • 레이아웃 inflate
    • savedInstanceState로 이전 상태에 대한 데이터 제공 
    • View와 관련된 객체를 초기화 할 수 있음

onViewCreated() 

  • onCreateView()가 정상적으로 호출되면 리턴되는 View 객체를 받아 호출된다. 
    • 이때 프래그먼트 데이터를 초기화( View의 초기값 설정 )
    • onCreateView()를 통해 반환된 View 객체는 onViewCreated()의 파라미터로 전달
    • Lifecycle이 INITIALIZED 상태로 업데이트
    • LiveData 옵저빙, RecyclerView, ViewPager2에 사용될 Adapter 세팅은 이 메소드에서 해주는 것이 적절함

onViewStateRestored()

  • 저장되어 있던 모튼 값이 복원되었을 경우 호출된다.
    • View lifecycle : INITIALIZED → CREATED 변경

onStart()

  • 액티비티의 onStart()와 유사, 사용자에게 보여질 수 있을 때 호출된다. 
    • View lifecycle : CREATED → STARTED 변경

onResume()

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

onPause()

  • 사용자가 프래그먼트를 떠날 때 호출된다.

onStop()

  • 프래그먼트가 화면에 보이지 않을 때 호출된다.
    • 부모 액티비티, 프래그먼트가 중단될 때, 상태가 저장될 때 호출
    • lifecylce : STARTED -> CREATED
    • FragmentTransaction을 안전하게 수행하는 마지막 지점

onSaveInstanceState()

  • 임시로 정보를 저장할 때 호출된다. 

onDestroyView()

  •  모든 animation, transaction이 완료, 프래그먼트와 관련된 뷰가 제거될 때 호출된다. // 화면으로부터 벗어났을 때 
    • Fragment View에 대한 모든 참조가 제거되어야 함 

onDestroy() 

  • 프래그먼트가 완전히 제거되거나, FragmentManager가 destroy 됐을 경우에 호출된다.    
    • Fragment Lifecycle의 끝을 알림

onDetach() 

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

 

Activity 생명주기

 

Activity 생명주기

Acitivty 의 생명주기를 알아야 하는 이유? - 앱의 완성도와 안정성을 높이기 위해 반드시 알아야 함 다른 앱으로 전환 시, 비정상 종료 되는 문제 사용자가 앱을 사용하지 않는데, 시스템 리소스가

dlho1222.tistory.com

 

 

 

 

 

 

 

참고 - https://developer.android.com/guide/fragments/lifecycle?hl=ko

+ Recent posts