안드로이드 애플리케이션에서 Activity는 사용자 인터페이스를 제공하는 기본 단위로, 여러 상태를 거치며 이벤트를 처리하는 생명 주기(Activity Lifecycle)를 가진다. 각 단계에서 호출되는 콜백 메서드를 통해 특정 작업을 수행할 수 있다.
- onCreate()
- Activity가 처음 생성될 때 호출된다.
- 초기화 작업을 수행하며, 레이아웃 설정 및 뷰 바인딩, 인터페이스 설정 등을 처리한다.
- onCreate()는 savedInstanceState라는 파라미터를 수신하는데, 이는 액티비티 이전 상태가 저장된 Bundle객체에 해당된다. (처음 생성된 액티비티인 경우 null을 담고 있음.) 이를 통해 이전 상태를 복원하여 화면에 표시할 수 있다.
- onStart()
- Activity가 사용자에게 보여지기 시작할 때 호출된다.
- 포그라운드 태스크로써 사용자와 상호작용할 수 있도록 화면 준비 작업을 수행한다.
- onResume()
- Activity가 사용자와 상호작용할 준비가 되었을 때 호출된다.
- 포커스를 얻고 사용자의 입력을 받을 수 있다.
- 어떤 방해 이벤트 및 인터럽트(전화가 오거나 화면을 슬립하는 등 이벤트)가 발생하여 사용자의 포커스가 없어지지 않는 이상, 앱은 RESUME상태에 머무르게 된다.
- 방해 이벤트 및 인터럽트가 발생하게 되면 액티비티는 PAUSED상태에 들어가게 되어 시스템이 onPause() 콜백 메서드를 호출하게 된다.
- onPause()
- 다른 Activity가 포커스를 얻거나 현재 Activity가 포커스를 잃을 때 호출된다.
- 일시적으로 중단되어야 할 작업을 처리한다.
- 액티비티가 PAUSED상태에 진입하게 되는 여러가지 루트들
- 앱이 실행되던 중 방해 이벤트 및 인터럽트가 발생한 경우 (전화가 갑자기 오는 경우)
- 멀티 윈도우 상 다른 앱에 포커스를 두는 경우
- 화면에 반투명 액티비티가 열리는 경우 (권한 요청 다이얼로그 등)
- onPause()는 아주 잠깐 실행되기 때문에 무언갈 저장하는 작업을 실행하기엔 시간이 부족할 수 있다. 따라서 onPause()내에서는 사용자 데이터 저장, 네트워크 호출, DB트랜잭션 등을 실행해서는 안 된다. 이렇게 부하가 큰 작업들은 onStop()메서드 에서 수행해야 한다.
- onStop()
- Activity가 더 이상 사용자에게 보이지 않을 때 호출된다.
- 리소스를 해제하거나 긴 수명의 작업을 저장한다.
- onDestroy()
- Activity가 소멸되기 직전에 호출된다.
- 모든 리소스를 해제하고 정리 작업을 수행한다.
- 만약 onDestroy()가 호출되기 까지 해제되지 않은 리소스가 있다면, 모두 여기서 해제해줘야 한다. 메모리 누수의 위험이 있다.
