-
프래그먼트 생명주기Android 2024. 4. 24. 10:12
프래그먼트의 생명주기를 이해하는 것은 안드로이드 앱을 효율적으로 관리하고, 사용자에게 부드러운 인터페이스 경험을 제공하는 데 중요하다.
프래그먼트는 액티비티처럼 동작하는 뷰이다. 따라서 프래그먼트도 액티비티와 생명주기가 유사하다.
예를 들어, 액티비티의 onStart() 함수가 호출되는 순간 해당 액티비티가 출력하는 프래그먼트의 onStart() 함수도 호출된다.
pigma 로 직접 만든 프래그먼트 생명주기 프래그먼트의 생명주기는 크게 5단계로 나눈다.
초기화(initialized) : 프래그먼트가 FragmentManager에 추가됨. 프래그먼트의 화면을 구성할 뷰가 준비되지 않은 상태
생성(created) : 프래그먼트의 화면을 구성할 뷰를 준비한다.
시작(started) : 프래그먼트의 화면이 사용자에게 보인다.
재개(resumed) : 사용자가 프래그먼트과 상호작용할 수 있는 상태. 포커스를 가지고 사용자의 이벤트를 처리한다.
소멸(destoryed)onAttach와 onCreate 함수에서는 뷰 객체를 이용하지 못하므로 뷰와 관련이 없는 초기화 로직을 수행한다.
onAttach() : 프래그먼트 생명주기에서 가장 먼저 실행된다!
프래그먼트가 액티비티에 연결되는 시점이다. 아직, 완전히 연결되진 않는다.
아래와 같은 코드를 보면 더 쉽게 와닿을 수 있다.
class SearchFragment : Fragment() { private lateinit var mContext: Context override fun onAttach(context: Context) { super.onAttach(context) mContext = context } ... }
프래그먼트인데, onAttach에서 context 변수가 Context로 되어있는데, context가 즉 프래그먼트가 붙어있는 뷰, 액티비티를 의미한다. 코드로 보면 더 이해하기 쉬울 것같다.
onCreate()
프래그먼트가 생성될 때 호출된다. 초기화 작업, 리소스 바인딩 등을 수행한다.
백스택을 사용하게 되면 기존 프래그먼트는 onCreateView 부터 재시작하기 때문에, onCreate 는 처음에 단 한번만 실행된다. 따라서, 해당 부분에 코드를 잘 작성하지 않고, onCreateView 에 대부분의 코드를 작성하게 된다.
onCreateView()
매개변수로 LayoutInflater 객체가 전달되므로 대부분 해당 함수에서 프래그먼트의 화면을 구성할 뷰 객체를 준비한다.
백스택을 통해서, 뷰가 재시작 될 때 해당 메소드부터 콜백이 실행되어, 코드를 여기서 많이 작성하게 된다.
- onViewCreated() : 액티비티와 프래그먼트의 뷰가 모두 생성된 상태이므로, 뷰와 관련된 초기화를 수행한다.
- onStart() : 프래그먼트가 사용자에게 보여질 준비가 되었을 때 호출된다. 필요한 리소스를 할당하거나, 애니메이션을 시작한다.
- onResume() : 프래그먼트가 사용자와 상호작용할 수 있는 상태가 되었을 때 호출되고, 프래그먼트가 포그라운드에 있을 때 실행되는 작업을 해당 함수 내부에서 처리한다.
- onPause() : 프래그먼트가 일시정지될 때 호출된다. 상태 저장, 스레드 중지 등의 작업을 수행한다.
- onStop() : 프래그먼트가 더이상 사용자에게 보이지 않을 때 호출된다.리소스 해제, 스레드 정지 등을 수행한다.
onDestroyView() : 프래그먼트의 뷰와 관련된 리소스를 정리할 때 호출된다.
override fun onDestroyView() { super.onDestroyView() _binding = null }
보통 이때 binding 를 해제한다. (리소스 낭비를 막기 위해)
- onDestroy() : 프래그먼트가 파괴될 때 호출된다. 프래그먼트의 상태를 정리하고, 모든 리소스를 해제한다.
- onDetach() : 프래그먼트가 액티비티로부터 분리될 때 호출된다. 프래그먼트가 액티비티와의 모든 연결을 해제한다.
다른 프래그먼트로 교체될 떄는 백 스택(back stack)을 사용하는 지에 따라 생명주기가 다르게 동작한다.
백 스택은 프래그먼트가 화면에 보이지 않는 순간 제거하지 않고 저장했다가 다시 이용할 수 있는 기능이다.
백 스택을 이용하면 사용자가 기기의 뒤로가기 버튼을 누를 때 이전 프래그먼트로 화면을 전환할 수 있다.
백 스택을 사용하면 onDestroyView() 상태에 있던 프래그먼트가 다시 화면에 보여질 때 onCreateView() 상태로 넘어간다.
그러나 백 스택을 사용하지 않으면 프래그먼트가 교체될 때 기존의 프래그먼트는 onDestory 까지 호출되어 제거된다.
'Android' 카테고리의 다른 글
Multi View Type RecyclerView (0) 2024.04.29 다이얼로그 (0) 2024.04.25 개인 과제 트러블 슈팅(프래그먼트 트랜잭션) (0) 2024.04.22 Fragment 3가지 데이터 전달 방식 (0) 2024.04.19 [Android] RecyclerView (0) 2024.04.15