Activity의 State Changes알아보기
Activity State Changes?
저번 글에서 알아봤듯이 Activity는 자신만의 LifeCycle을 가지고 있고 이는 Activity의 현재 상태에 따라 변경됩니다.
이 Activity의 상태는 시스템이나 사용자가 발생시키는 여러가지 이벤트에 의해 변경됩니다. 오늘은 Activity의 상태가 변경되는 여러가지 케이스에대해 알아보려합니다.
Configuration Changes (구성 변경)
첫번째는 Configuration Changes(구성 변경)발생 입니다.
구성변경이란 시스템의 어떠한 구성이 변경되어 Activity가 제거되고 다시 실행되는것을 의미합니다.
Activity 재시작 flow
- onPause() -> onStop() -> onDestroy() [제거]
- onCreate() -> onStart() -> onResume() [생성]
이러한 Configuration Changes는 아래와 같은 상황에 발생합니다.
- 세로모드 가로모드 전환
- 언어 설정
- 입력 기기 변경
위에서 설명한것처럼 Configuration Changes가 발생하면 Activity가 재시작 되기때문에 ViewModel, saveInstanceState() 등을 활용해서 데이터를 보존할 수 있습니다.
추가로 Android 7.0 (API 24)에서부터 사용 가능한 멀티 윈도우상태에서도 Configuration Changes가 발생할 수 있습니다. 구성 변경 발생 상황은 다음과 같습니다.
- 멀티 윈도우 모드로 전환시
- 멀티 윈도우 모드에서 앱 사이즈 조절시
Activity, Dialog가 포그라운드에 나왔을 때
두번째는 Activity, Dialog가 포그라운드에 나왔을 때 입니다.
첫번째 케이스는 새로운 Activity나 Dialog가 포그라운드에 표시되어 기존 Activity를 부분적으로 가리는 경우 입니다.
이 경우에는 Activity의 상태가 다음과 같이 변합니다.
- 기존 Activity는 포커스를 잃고 일시정시 상태로 전환됨 (PAUSED 상태, onPause() 콜백 호출)
- 기존 Activity가 다시 포커스를 얻으면 onResume() 호출
두번째 케이스는 새로운 Activity나 Dialog가 포그라운드에 표시되어 기존 Activity를 완전히 가리는 경우입니다.
이 경우에는 Activity의 상태가 다음과 같이 변합니다.
- 기존 Activity는 포커스를 잃고 중지됨 상태로 전환됨, 이때 시스템은 빠르게 onPause(), onStop()을 연달아 호출 (STOPED 상태)
- 기존 Activity가 다시 포커스를 얻으면 onStart(), onResume() 호출
포커스를 잃었던 Activity가 다시 포커스를 얻을때 기존 인스턴스인지, 새로운 인스턴스인지에 따라 동작이 달라집니다.
- 기존 인스턴스가 그대로 돌아오는 경우 -> onRestart(), onStart(), onResume()가 호출됩니다.
- 새로운 인스턴스가 포커스를 얻는경우 -> onStart(), onResume()가 호출됩니다.
사용자가 뒤로가기를 탭하는 경우
3번째는 Activity가 포그라운드에 있을때 사용자가 뒤로가기를 탭하는 경우입니다.
이 경우에는 Android의 버전에 따라 다르게 동작합니다.
- Android 11 이하인 경우: onPause() -> onStop() -> onDestroy() 호출
- Android 12 이상인 경우: onPause() -> onStop() 호출
또한 뒤로가기 동작시에는 onSaveInstance() 콜백이 실행되지 않습니다, 시스템에서 뒤로가기 클릭시에는 사용자가 동일한 인스턴스로 돌아갈것이라고 판단하지 않기 때문입니다.
추가로 onBackPressed() 매서드를 재정의 하여 앱 종료관련 상호작용을 할 수 있습니다.
ex) 더블클릭시 앱종료, '정말로 앱을 종료하시겠습니까?' Dialog등등
시스템이 앱 프로세스를 종료하는 경우
마지막으로 앱이 백그라운드에 있고 시스템에서 포그라운드 앱을 위해 메모리를 확보해야하는 경우입니다.
- 시스템이 백그라운드 앱을 종료시킬 수 있다.
- onDestroy()가 반드시 호출된다는 보장은 없다.
마무리
오늘은 Activity의 여러가지 상태 변경에 대해 알아보았습니다.
오늘도 글 읽어주셔서 감사합니다, 글에 대한 피드백은 언제나 환영입니다!
참고한 자료
https://developer.android.com/guide/components/activities/state-changes?hl=ko#back
'Android' 카테고리의 다른 글
[Android/Basic] Px, Dp, Sp에 대해 알아보기 (0) | 2024.10.14 |
---|---|
[Android/Basic] 2. Activity의 LifeCycle 알아보기 (3) | 2024.07.22 |
[Android/Basic] 1. Android 4대 컴포넌트 알아보기 (1) | 2024.07.22 |
[Android/Thread] 2. Thread간의 통신과정 알아보기 (1) | 2024.06.05 |
[Android/Thread] 1. Android의 Thread환경 (0) | 2024.05.16 |