원문 The Android Lifecycle cheat sheet — part I: Single Activities을 번역한 글입니다.
개요
사용자는 앱을 이용하면서 화면을 돌리거나, 알림에 반응하거나, 다른 일을 하게되는데, 이런 이벤트가 발생한 뒤에도 사용자는 앱을 원활하게 사용할 수 있어야 한다.
이러한 UX를 제공하려면 컴포넌트의 Lifecycle을 관리할 줄 알아야 한다. 컴포넌트는 Activity, Fragment, Service나 앱 그자체, 혹은 기본 프로세스일 수 있다. 컴포넌트들은 Lifecycle을 가지고 있고, Lifecycle동안 상태가 변한다. 시스템은 Lifecycle Callback Method를 통해 앞서 말한 상태의 변화를 우리에게 알려준다.
(1) Single Activity
상황 1. 앱 종료(finish) 및 재시작(restart)
👉 일어나는 경우
- 사용자가 뒤로가기 버튼을 누르거나
-
Activity.finish()
가 호출될 때
👉 상태 관리하기
-
onSaveInstanceState
는 호출되지 않는다. (Activity가 종료되므로 상태를 저장할 필요 없음) - 앱이 종료되면 복원할 상태가 없기때문에, 앱이 재시작될 때
onCreate
는 Bundle을 가지고 있지 않는다.
상황 2. 사용자가 다른 곳으로 이동
👉 일어나는 경우
- 사용자가 홈 버튼을 누르거나
- 다른 앱으로 이동했을 때
시스템은 앱을 중지(Stop)하지만, 바로 끝내(finish)지는 않는다.
👉 상태 관리하기
Activity가 중지 상태에 들어가면, 시스템이 앱 프로세스를 kill할 경우에 대비해 onSaveInstanceState
를 통해 앱의 state를 저장한다.
프로세스가 kill되지 않았을 경우, Activity의 인스턴스는 모든 State를 보유한 채로 메모리에 남아있게 된다. Activity가 foreground 상태로 돌아오면, Activity는 이전의 정보들을 다시 초기화할 필요없이 이미 생성했던 정보를 다시 불러오면 된다.
상황 3. Configuration이 바뀜
👉 일어나는 경우
- 회전과 같은 구성 변경이 일어나거나
- 사용자가 멀티 윈도우 기능을 통해 윈도우 크기를 조정하는 경우
👉 상태 관리하기
회전이나 윈도우 크기 변화 같은 구성 변경이 일어나도 사용자가 중단했던 시점부터 계속할 수 있도록 해야 한다.
- Activity는 destroy되지만, state는 저장되고 새로운 인스턴스에 복원된다.
-
onCreate
의 Bundle과onRestoreInstanceState
의 Bundle은 같다.
상황 4. 앱이 시스템에 의해 일시 중지(pause)될 때
👉 일어나는 경우
- 멀티 윈도우 기능 도중 포커스를 잃을 때
- 다른 앱이 현재 실행 중인 앱 위를 부분적으로 덮을 때 (구매 다이알로그, 런타임 퍼미션 다이알로그, 로그인 다이알로그…)
- 공유 다이알로그같은 intent 선택기가 나타난 경우
❌ 이런 경우는 일어나지 않아요
- 같은 앱의 다이알로그 (AlertDialog나 DialogFragment)
- Notification (사용자가 새로운 Notification을 받거나 Notification Bar를 내렸을 때)
에는 Activity가 일시중지 되지 않는다.
비교
REFERENCE
The Android Lifecycle cheat sheet — part I: Single Activities