Activity Lifecycle 와 Lifecycle callbacks
사용자가 앱을 탐색하고, 앱에서 나가고, 앱으로 다시 돌아가면, 앱의 Activity 인스턴스는 수명 주기 안에서 서로 다른 상태를 통해 전환된다. Activity 클래스는 activity의 상태 변화를 알아차릴 수 있는 여러 콜백을 제공한다. 각 콜백은 상태 변화에 적합한 특정 작업을 실행할 수 있도록 한다.
Lifecycle callbacks 개념 및 구현 정보
onCreate()
- Activity를 생성할 때 호출, 필수적으로 구현해야 한다.
- Activity의 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행한다.
- savedInstanceState : Activity의 이전 저장 상태가 포함된 Bundle 객체이다.
- setContentView() : XML 레이아웃 파일을 Inflate한다.
- 예
- 데이터를 목록에 바인딩
- Activity를 ViewModel과 연결
- 일부 클래스 범위 변수를 인스턴스화
onStart()
- Activity가 시작될 때 호출된다.
- Activity가 사용자에게 표시 되고, Activity를 포그라운드에 보내 상호작용할 수 있도록 준비한다.
- 매우 빠르게 완료된다.
- 예
- 애니메이션 실행
- 데이터 갱신
- 앱이 UI를 관리하는 코드를 초기화
onResume()
- Activity가 재개될 때 포그라운드에 표시되고 호출된다.
- 사용자와 상호작용하는 단계이다.
- 앱의 포커스가 사라질 때까지 지속된다(전화가 오거나, 다른 Activity로 이동하거나, 기기 화면이 꺼지거나 등).
- 예
- onPause()에서 해제하는 component 초기화
- Activity가 재개될 때 마다 필요한 초기화
onPause()
- Activity가 포커스를 잃을 때 호출된다(항상 소멸되는 것은 아니다).
- 포그라운드에 있지 않게 되었다는 것을 나타내지만 멀티 윈도우 모드에서는 여전히 표시 될 수 있다.
- 계속 실행되어서는 안되지만 잠시 후 다시 시작할 작업을 일시중지하거나 조정한다.
- 구성요소가 포그라운드에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있다.
- 카메라 미리보기 정지
- UI 관련 리소스와 작업을 해제할 수도 있지만 onStop()에서 해제하는것을 권장한다.
- 이유 : 멀티 윈도우 모드에서는 여전히 보일 수 있다.
- 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족할 수 있다.
- 애플리케이션 또는 사용자 데이터 저장, 네트워크 호출, 데이터베이스 트랜잭션을 실행해서는 안 된다.
- 메서드 실행이 끝나기 전에 완료되지 못할 수도 있다.
- 부하가 큰 종료 작업은 onStop() 상태일 때 실행해야 한다.
- 애플리케이션 또는 사용자 데이터 저장, 네트워크 호출, 데이터베이스 트랜잭션을 실행해서는 안 된다.
- Activity가 다시 시작되거나(onResume()) 사용자에게 완전히 보이지 않게 될 때까지(onStop()) 이 상태에 머무른다.
- 예
- 방해되는 이벤트가 발생할 때
- 멀티 윈도우 모드에서 하나의 앱 이외의 다른 모든 앱
- 새로운 반투명 Activity가 열릴 때(예: 대화상자)
onStop()
- Activity가 더 이상 사용자에게 표시되지 않으면 호출된다.
- 앱이 사용자에게 보이지 않는 동안 필요하지 않은 리소스를 해제하거나 조정해야 한다.
- 애니메이션을 일시중지
- 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환
- CPU를 비교적 많이 소모하는 종료 작업을 실행해야 한다.
- 정보를 데이터베이스에 저장
- Activity 객체는 메모리 안에 머무르게 된다.
- 이 객체가 모든 상태 및 멤버 정보를 관리하지만 window manager와 연결되어 있지는 않다. Activity가 다시 시작되면 이 정보를 다시 호출한다. onResume() 상태에 이르기까지 생성된 구성요소는 다시 초기화할 필요가 없다.
- 시스템은 레이아웃에 있는 각 View 객체의 현재 상태도 기록한다. 따라서 사용자가 EditText 위젯에 텍스트를 입력하면 해당 내용이 저장되기 때문에 이를 저장 및 복원할 필요가 없다.
- 예
- 새로 시작된 Activity가 화면 전체를 차지할 경우
- Activity의 실행이 완료되어 종료될 시점
onDestroy()
- Activity가 소멸되기 전에 호출된다.
- ViewModel 객체를 사용하여 Activity의 관련 뷰 데이터를 포함해야 한다.
- 예
- 사용자가 Activity를 완전히 닫거나 finish()가 호출되어 Activity가 종료되는 경우
- 구성 변경(기기 회전 또는 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 Activity를 소멸시키는 경우
- 다음 두 가지 시나리오는 isFinishing() 메서드로 구분할 수 있다.
- 구성 변경으로 인해 다시 생성될 경우 ViewModel은 그대로 보존되어 다음 Activity 인스턴스에 전달된다.
- Activity가 다시 생성되지 않을 경우 ViewModel은 onCleared() 메서드를 호출하여 Activity가 소멸되기 전에 모든 데이터를 정리해야 한다.
- 다음 두 가지 시나리오는 isFinishing() 메서드로 구분할 수 있다.
- 이전의 콜백에서 아직 해제되지 않은 모든 리소스를 해제해야 한다.
'기타 > Android' 카테고리의 다른 글
[Android] Data Binding이란? (0) | 2023.07.16 |
---|---|
[Android] 안드로이드 Go to the documentation to learn how to Fix dependency resolution errors. 에러 해결 방법 (0) | 2023.04.21 |
[Kotlin] This expressions 란? (1) | 2023.02.27 |
[Kotlin] Sealed class 란? (0) | 2023.02.25 |
[Kotlin] Scope functions(let, run, with, apply, also) 정리 (0) | 2023.02.22 |