Activity는 사용자나 시스템의 요청에 따라 다양한 상태로 전환될 수 있습니다. 앱을 실행하는 도중에 잠깐 다른 앱으로 이동, 다른 Activity로 이동, 앱을 종료하는 등의 전환이 발생했을 때 Activity에서 이를 알아차리고 적절한 처리를 하도록 콜백을 구현할 수 있습니다.
Android 공식 문서에서는 Lifecycle 콜백을 통해 아래 문제를 해결할 수 있다고 예시를 들어 설명합니다.
- 사용자가 앱을 사용하는 도중에 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 문제
- 사용자가 앱을 활발하게 사용하지 않는 경우 귀중한 시스템 리소스가 소비되는 문제
- 사용자가 앱에서 나갔다가 나중에 돌아왔을 때 사용자의 진행 상태가 저장되지 않는 문제
- 화면이 가로 방향과 세로 방향 간에 회전할 경우, 비정상 종료되거나 사용자의 진행 상태가 저장되지 않는 문제
Lifecycle
개발자는 Activity를 직접 만들지 않습니다. Intent를 통해 Android System에 해당 Activity를 띄어달라고 요청할 뿐입니다.
즉 Activity는 Android System에 의해서 관리됩니다.
위의 그림을 통해 Activity가 언제 생성되고, 멈추고, 삭제되는지 알 수 있습니다. onCreate, onStart 등의 콜백 함수를 구현해서 각 상태로 전환되었을 때 처리를 해줄 수 있습니다.
Activity가 처음 실행되면 onCreate -> onStart -> onResume 순으로 호출됩니다.
이후 activity를 종료하면 onPause -> onStop -> onDestroy순으로 호출되고 삭제됩니다.
보시면 콜백 함수들이 2개씩 짝지어져 있습니다.
Activity 생성/삭제 | onCreate | onDestroy |
Activity 표시/숨김 | onStart | onStop |
Activity 포커스 | onResume | onPause |
Activity 생성 삭제
Activity가 최초에 생성될 때 onCreate가 호출됩니다. 반대로 삭제될 때는 onDestroy가 호출되겠죠.
Activity 생성과 삭제는 Lifecycle동안 각각 한 번만 이루어집니다. Activity를 초기화하는 로직을 onCreate에 넣고, 정리가 필요한 리소스들을 정리하는 로직을 onDestory에 넣으면 좋겠죠?
Activity 표시/숨김
Activity가 표시되기 전에 onStart, 표시되지 않기 전에 onStop이 호출됩니다. 그러므로 onStart에서는 UI관련 로직을 초기화하고, onStop에서는 애니메이션이나 UI로직을 일시정지하는 코드를 넣을 수 있습니다.
Activity 포커스
Activity가 포커스되면 onResume, 반대로 포커스를 잃게되면 onPause이 호출됩니다. 포커스를 얻은 상태는 사용자에게 보이고, 상호작용할 수 있는 상태를 의미합니다.
참고
https://developer.android.com/guide/components/activities/activity-lifecycle
'Android' 카테고리의 다른 글
[Android] NestedScrollView 내부에 RecyclerView를 사용했을 때 스크롤이 제대로 안되는 문제 (0) | 2022.08.14 |
---|---|
[Android] Handler Deprecated 문제 (0) | 2022.08.01 |
[Android] Chronometer (0) | 2022.07.04 |
[Android] 크기 단위 (DP, SP, PX, ...) (0) | 2022.07.04 |
[Android] 이벤트 처리 (0) | 2022.07.04 |