Activity Lifecycle
Activity의 생명주기는 총 7가지로 분류할 수 있습니다.
1. onCreate()
이 콜백은 시스템이 먼저 활동을 생성할 때 실행되는 것으로, 필수적으로 구현해야합니다.
활동의 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행합니다.
ex) ViewModel 연결, 데이터 바인딩, 일부 클래스 범위 변수들을 인스턴스화
2. onStart()
활동이 사용자에게 표시되고, 앱은 활동을 foreground에 보내 상호작용할 수 있도록 준비합니다.
ex) 앱이 UI를 관리하는 코드를 초기화합니다.
3. onResume()
앱이 사용자와 상호작용합니다.
어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무릅니다. 이 상태에서 foreground에서 사용자에게 보이는 동안 실행해야하는 모든 기능을 활성화할 수 있습니다.
ex) 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트
방해되는 이벤트가 발생하면 활동은 일시중지됨 상태에 들어가고 시스템이 onPause()를 호출합니다. 활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한 번 호출합니다. 따라서 onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 활동이 재개됨 상태로 전환될 때마다 필요한 다른 초기화 작업도 수행해야 합니다.
4. onPause()
사용자가 활동을 떠났을 때 onPause()가 호출됩니다. 여기에서 수명 주기 구성요소는 구성요소가 foreground에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있습니다. ex) 카메라 미리보기 정지
또한 활동이 일시정지 상태이기 때문에 사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미칠 수 있는 모든 리소스를 해체할 수 있습니다. => 멀티 윈도우 상태에서는 다를 수 있습니다.
onPause() 메서드는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족할 수 있습니다. 그러므로 onPause()를 사용하여 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행해서는 안됩니다. 그 대신, 부하가 큰 종료 작업은 onStop() 상태일 때 실행해야 합니다.
5. onStop()
새로 시작된 활동이 화면 전체를 차지할 경우 적용, 즉 활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태가 되고 onStop() 콜백을 호출하게 됩니다.
앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야합니다. ex ) 애니메이션을 일시중지, 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환
CPU를 비교적 많이 소모하는 종료 작업을 실행해야 합니다. ex) 정보를 데이터베이스에 저장할 적절한 시기를 차지 못했다면 onPause() 상태일 때 저장할 수 있다.
6. onDestroy()
활동이 소멸되기 전에 호출됩니다.
1. 사용자가 활동을 완전히 닫거나 활동에서 finish()가 호출되어 활동이 종료되는 경우
2. 구성 변경 (예: 기기 회전 또는 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우
활동에 소멸되는 이유를 결정하는 로직을 입력하는 대신 ViewModel 객체를 사용하여 활동의 관련 뷰 데이터를 포함해야 합니다. 활동이 구성 변경으로 인해 다시 생성될 경우 ViewModel은 그대로 보존되어 다음 활동 인스턴스에 전달되므로 추가 작업이 필요하지 않습니다. 활동이 다시 생성되는 경우 ViewModel은 onCleared() 메서드를 호출하여 활동이 소멸되기 전에 모든 데이터를 정리해야 합니다.
7. onRestart()
화면이 재생성될 경우, 중단됨 상태에서 재개됨 상태로 변할 때 restart를 거치게 됩니다.
'Android' 카테고리의 다른 글
[Android Module] Android 모듈화 왜 하는 걸까? (0) | 2022.05.28 |
---|---|
Software Maestro OSS 모바일 팀에 참여하다. (0) | 2022.05.28 |
2022 Android Roadmap (안드로이드 로드맵) (0) | 2022.04.23 |
[Android] Recyclerview 에 대해 알아보자! (0) | 2022.01.17 |
[Android] Todo List만들기 (CRUD 공부) (2) | 2022.01.17 |
댓글