성장기록지
안드로이드 Life Cycle (with Activity,Fragment) 본문
Android LifeCycle이란?
Android의 앱 구성요소가 생성부터 사용,소멸까지의 일련의 과정을 말한다.
대표적으로 Activity, Fragment, Service 등이 생명주기를 가지고있다.
Activity LifeCycle
생명주기를 살펴보기전에 자주 나오는 용어를 정리해보고자 한다.
foreground는 가장 위에 있는 상태(사용자에게 보여지는 상태) 이고,
background는 반대로 가장 아래에 있는 상태를 의미한다.
이제 각각의 콜백에 대해서 설명해보자.
onCreate()
액티비티가 생성될 때 호출된다. 단 한번만 호출되기 때문에, 필요한 변수를 초기화하거나,
setOnClickListener , 뷰모델 등 초기화 작업에 적합하다.
onStart()
foreground가 될때마다 호출이 되어진다.
앱의 activity가 사용자와 상호작용 하기 전에 (onResume() 이전에) 실행된다.
상호작용하기 이전에 세팅들을 이곳에서 하기 적합하다.
ex) 애니메이션 실행.
onStop()에서 작업을 해제해주어야 한다!
onResume()
activity와 사용자가 상호작용하는 단계이다.
상호작용 시 할 일들을 이 곳에서 세팅한다.
화면이 가려졌다가 다시 foreground 상태가 된다면 onResume()이 호출되기 때문에 주의해야한다.
상호작용?
사용자에게 입력을 받고, 그에 따른 결과를 표현하는 것이라고 설명할 수 있다.
onPause()
화면이 일부 또는 전체가 가려질 경우 호출되어진다.
일부가 가려질경우에는 onPause 호출 후, 다시 foreground로 돌아왔을 때 onRestart() -> onResume이 호출되고,
전체가 가려질 경우에는 onPause 호출 후 onStop이 호출됩니다.
onStop()
앱이 백그라운드 상태에 도달하면 onStop()이 호출된 상태에 머무르게 된다.
사용자와의 상호작용이 중단된 후이기 때문에 시스템의 리소스를 많이 차지하는 기능들을 중단시키기에 적합하다.
다시 화면 전체가 보여지게 된다면 onRestart-> onStart-> onResume을 호출한다!
OnStart()에서 실행한 작업을 해제해주는 작업이 필요한 시기다!
onDestroy()
activity가 소멸될 때 호출되어진다. 메모리 누수 방지를 위해 필요치 않은 모든 리소스를 해제해줘야 한다!
Fragment LifeCycle
아래 그림과 같이 프래그먼트의 생명주기는 액티비티와 다르게 뷰의 생명주기가 따로 존재한다.
액티비티와 다른 생명주기들을 위주로 작성해보도록 하겠다.
onAttach() & onCreate()
Fragment의 CREATED단계
프래그먼트는 FragmentManager에 추가되며 onAttach()와 onCreate()가 차례대로 호출된다.
onAttach()에서는 프래그먼트가 호스트 액티비티에 attach 되고, onAttach()에서 작업이 성공적으로 이루어지면 onCreate()에서 프래그먼트 자체가 생성된다.
뷰는 생성되지 않은 단계이다.
onAttach()
프래그먼트가 호스트 액티비티에 attach 된다.
onCreate()
프래그먼트 자체가 생성된다.
onCreateView() & onViewCreated()
Fragment의 CREATED & View의 INITIALIZED 단계
onCreateView()
findViewById() 또는 View Binding을 사용해서 뷰를 초기화 하는 작업을 진행한다.
정상 초기화 시 뷰 객체를 반환한다.
onViewCreated()
onCreateView()에서 뷰 객체가 반환된 직후에 호출되며, 뷰가 완전히 생성되었음을 보장한다.
따라서 뷰에 대한 참조 및 작업은 onViewCreated()에서 하는 것이 안전하다.
onViewStateRestored()
Fragment의 CREATED & View의 CREATED 단계
onViewStateRestored()은 저장해둔 모든 state 값이 프래그먼트 뷰의 계층구조에 복원되었을 때 호출되며, 따라서 각 뷰의 상태값을 체크할 수 있다(ex 체크박스가 현재 체크되어 있는지).
Fragment의 상태 보존은 다른 글을 통해 다루도록 하겠다.
onDestroyView()
Fragment의 CREATED & View의 DESTROYED 단계
프래그먼트의 뷰가 소멸될 시 호출된다. 이 때 프래그먼트 뷰에 대한 참조를 제거해야 메모리 누수를 방지할 수 있다.
메모리 누수란 존재는 하지만 사용하지 않는 것이 있다면, 자원낭비가 이루어진다는 의미이다.
따라서 만약 View Binding을 사용하고 있다면 onDestroyView()에서 _binding 변수를 null로 만들어 주는 것이 좋다.
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
마치며
이렇게 간단하게 Activity와 Fragment의 생명주기에 대해 알아보았다.
다음 글에는 Activity의 State Change에 대한 생명주기 과정과
Fragment의 상태 보존에 대해 다뤄보겠다!
'안드로이드' 카테고리의 다른 글
Compose State와 State hoisting (0) | 2025.01.08 |
---|---|
Android의 Clean Architecture란? (0) | 2025.01.07 |
android 권장 아키텍쳐란? (0) | 2025.01.02 |
Fragment Manager란? (0) | 2024.12.30 |
사용하기 전에 알아보는 Jetpack Room (0) | 2024.12.21 |