Skip to content
This repository has been archived by the owner on Apr 6, 2022. It is now read-only.

Fragment 생명주기

배준일(Bae Junil) edited this page Aug 25, 2021 · 4 revisions

onAttach()

프래그먼트가 액티비티에 붙을 때 호출된다. 아직 프래그먼트가 완벽하게 생성된 상태는 아니며, 인자로 context가 주어진다.

onCreate()

액티비티와 마찬가지로 초기화해야하는 리소스들을 여기서 초기화한다. 프래그먼트를 생성하면서 넘겨준 값들이 있다면, 여기서 변수에 넣어주면 된다. 여기서 UI는 초기화 할 수 없다. 본격적으로 프래그먼트가 액티비티에 호출을 받아 생성되는 시점이다. 액티비티의 onCreate()에선 view나 ui관련 작업을 할 수 있으나, 프래그먼트의 onCreate()에서는 할 수 없다.

onCreateView()

여기서 UI작업을 한다. 레이아웃을 인플레이트(inflate)하는 곳이다. View 객체를 얻을 수 있으므로, 버튼이나 텍스트뷰 등을 초기화 할 수 있다. 프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출한다. View를 반환해야 한다. 이 메서드는 프래그먼트의 레이아웃 루트이기 때문에 UI를 제공하지 않는 경우에는 null을 반환하면 된다. 프래그먼트에 속한 각종 view나 viewGroup에 대한 ui 바인딩 작업을 할 수 있다. (Layout을 inflater하여 View작업을 한다.) fragment에서 UI를 그릴 때 호출되는 콜백이다. onCreateView의 매개변수로 전달되는 container가 Activity의 ViewGroup이며, 여기에 Fragment가 위치하게 된다. 또 다른 매개변수인 savedInstanceState는 Bundle 객체로 Fragment가 재개되는 경우 이전 상태에 대한 데이터를 제공한다.

onActivityCreated()

프래그먼트에서 onCreateView를 마치고 액티비티에서 onCreate가 호출되고 나서 호출되는 함수. 액티비티와 프래그먼트의 뷰가 모두 생성된 상태로, View를 변경하는 작업이 가능한 단계이다. 액티비티에서 프래그먼트를 모두 생성하고 난 다음에 호출된다. 액티비티와 프래그먼트가 드디어 연결되는 시점이다. Activity와 Fragment의 뷰가 모두 생성되고, 연결된 상태이다.

onStart()

프래그먼트가 사용자에게 보여지기 전에 호출되는 함수 유저에게 프래그먼트가 보이도록 해준다. Activity와 같이 Fragment가 화면에 보여지기 직전 빠르게 실행된다. 여기서 Activity는 시작됨 상태이다.

onResume()

프래그먼트가 비로소 화면에 보여지는 단계이다. 사용자에게 포커스를 잡은 상태로 사용자와의 상호작용이 가능하다. Activity와 마찬가지로 이벤트가 발생하여 Fragment가 가려지기 전까지 이 상태가 유지된다.

onPause()

프래그먼트는 사용자와의 상호작용을 중지한다. 부모 Activity가 아닌 다른 Activity가 위로 올라오거나, 다른 Fragment가 add되는 경우 일시정지 상태로 들어간다. UI관련 처리를 정지하고, 중요한 데이터를 저장한다.

onStop()

프래그먼트는 더이상 보여지지 않게되며, 프래그먼트 기능이 중지된다. Fragment가 완전히 가려지는 경우, onPause()에 이어 onStop()까지 실행된다. 시스템에서 onStateInstance()를 호출하여 UI의 상태를 저장하므로 Activity를 다시 띄우면 이전 상태가 그대로 보여진다.

onDestroyView()

Fragment와 관련된 view가 제거될 때 실행된다. Activity에서 Fragment 생성 시 addToBackStack()를 요청했을 경우 onDestroy()를 호출하지 않고 인스턴스가 저장되어 있다가 Fragment를 다시 부를 때 onCreateView()를 실행하여 다시 화면에 보여지게 한다.

onDestroy()

view가 제거된 후 Fragment가 완전히 소멸되기 전에 호출된다.

onDetach()

Fragment가 완전히 소멸되고, Activity와의 연결도 끊어질 때 실행된다.

참고

https://asong-study-record.tistory.com/69