Activity는 안드로이드 앱의 entry point입니다.
그리고 앱을 만드는 주요 Component 중 하나입니다.
사용자와 앱이 interaction(터치, 텍스트 입력, 화면 이동 등) 할 수 있도록 지원합니다.
이러한 Activity에서는 사용자와 직접적으로 직면할 수 있는 요소이기 때문에
사용자가 하는 작업에 따라 사이클을 관리해줘야 합니다.
Activity에서는
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onDestroy()
총 6가지 콜백을 제공합니다.
시스템은 새로운 상태에 들어가면 콜백을 호출합니다.
위 그림은 안드로이드 Activity의 라이프 사이클을 그림으로 표현한 것입니다.
유저가 어떤 행동을 하는지나 시트템에 의해 사이클이 변경되는데
앱이 포그라운드 상태가 되기 위해선 onCreate, onStart, onResume 상태를 거칩니다.
이후에 onPause, onStop, onDestroy 등의 상태를 거쳐 Activity가 종료됩니다.
조금 더 자세하게 각 상태에 대해 알아보겠습니다.
onCreate
이 콜백은 시스템이 먼저 활동을 생성할 때 실행되는 것으로, 필수적으로 구현해야 합니다.
해당 콜백은 activity가 생성되었을 때 호출됩니다.
onCreate는 활동의 전체 수명 주기 동안 한 번만 발생해야 하는
기본적인 애플리케이션 시작 로직을 실행합니다.
onCreate에서는 처음에 액티비티를 준비할 때 생성되어야 하는 작업들을 실행합니다.
또한 레이아웃을 그리는데 필요한 초기회 작업을 처리합니다.
뷰에 대한 클릭 리스너는 여기에서 설정해 줍니다.
onStart
이 콜백은 활동이 시작됨 상태에 들어가면 실행됩니다.
액티비가 화면에 보이기 바로 전에 호출됩니다.
보통 네트워크 통신을 통해 데이터를 받아오는 작업이나 서비스 또는 리스터 등록 등의 작업을 합니다.
화면에 돌아올 때마다 실행시켜야 하는 부분들은 onStart에 실행시킵니다.
onStart는 onStop과 상반됩니다.
onResume
이 콜백은 화면이 포 그라운드 상태가 되었을 때 실행됩니다.
어떠한 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 이 상태로 머무릅니다.
포커스가 떠나는 예는 전화가 온다던가, 기기화면이 꺼지거나 하는 이벤트를 뜻합니다.
활동이 재개될 때마다 실행해야 하는 로직을 실행시킵니다.
onResume은 onPause와 상반됩니다.
onPause
이 콜백은 사용자가 활동을 떠나는 것을 나타내는 첫 신호로 호출됩니다.
여기 콜백부터는 활동이 포그라운드에 있지 않습니다.
활동이 해당 상태에 들어가는 경우는 여러 가지가 있습니다.
예를 들면
- 일부 이벤트(전화나 기기화면이 꺼지는 것처럼 화면을 가리는)가 발생하였을 때 앱 실행이 방해됩니다.
- 멀티 윈도 모드에서 실행됩니다.
액티비티는 하나의 창만 포커스를 가질 수 있기 때문에 시스템이
해당 창(앱)을 제외한 다른 앱들은 중지시킵니다. - 새로운 활동(Dialog)이 실행되는 경우에 열립니다. 활동이 부분적으로 보이지만 포커스 상태가 아니면
일시 중지 상태로 유지됩니다.
해당 함수에서는 사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미칠 수 있는
모든 리소스(예를 들면 영상을 중지하는 등)와 센서를 해제할 수 있습니다.
하지만 멀티 윈도우 작업에서 onPause가 되지만 화면에는 보이기 때문에
UI와 관련된 작업을 해제하는 것은 onStop에서 해줘야 합니다.
onStop
해당 콜백은 활동이 더 이상 사용자에게 표시되지 않으면 중단됨 상태에 들어갑니다.
이때 시스템은 해당 콜백을 호출합니다.
예를 들면 새로 시작된 활동이 화면 전체를 차지할 경우에 적용됩니다.
활동의 실행이 완료되어 종료될 시점에 호출할 수도 있습니다.
해당 상태에서는 앱이 사용자에게 보이지 않는 동안 앱에 필요하지 않은 리소스를 해제하거나
조정해야 합니다.
예를 들면 애니메이션을 중지한다던가 CPU를 비교적 많이 소모하는 작업들도 종료합니다.
onDestroy
해당 콜백은 활동이 소멸되기 전에 호출됩니다. 아래와 같은 상황에서 호출됩니다.
- 사용자가 활동을 완전히 종료하거나 finish()가 호출되어 활동이 종료되는 경우
- 구성 변경으로 인해 시스템이 일시적으로 활동을 소멸하는 경우
onDestroy에서는 이전 콜백에서 아직 해제되지 않은 모든 리소스를 해제해야 합니다.
해당 함수가 호출되는 것을 완전히 보장할 순 없기 때문에 종료하는 작업들을 진행합니다.
마무리
안드로이드 앱을 개발하고 있었지만,
정작 중요한 안드로이드에 대해 잘 알지 못했던 것 같습니다.
아직 공부해야 할 일은 한참 남았다는 것을 새삼 느끼게 되네요..
'Android' 카테고리의 다른 글
Composable 에서 ViewModel 공유하기 (0) | 2023.02.19 |
---|---|
[Android] - ConstraintLayout 장점 (0) | 2023.02.17 |
[Android] - Android Studio에서 SVG 파일 사용하기 (0) | 2023.02.15 |
[Android] - View와 ViewGroup란 무엇일까 (0) | 2023.02.11 |
안드로이드의 시작 상태 - app startup time (Cold, Warm, Hot) (0) | 2023.02.07 |