Activity Lifecycle
액티비티 생명주기란 액티비티가 생성되고 종료되기까지의 상태를 의미한다. Activity 클래스는 6가지의 Callback method를 제공한다. Activity의 상태가 변경될 때마다 각각의 수명 주기 콜백 호출한다.
수명 주기 콜백
- onCreate()
-
전체 수명 주기 동안 한 번만 발생하는 콜백 → 필수적으로 구현해야 함!!
-
xml 파일과 멤버 변수를 정의하고, UI의 일부를 onCreate() 내에서 생성한다.
// xml 화면과 연결
setContentView(R.layout.main_activity)
-
onCreate() 메서드가 실행을 완료하면 onStart() 메서드를 호출한다.
- onStart()
- 이 호출을 통해 앱에서 활동이 foreground로 전환되어 액티비티가 화면에 보이기 시작할 때를 의미한다.
- 화면에 보일 UI 로직을 구현해야 한다.
- 이 메서드는 빠르게 완료되며, onStart()가 완료되면 onResume() 메서드를 호출한다.
- onResume()
- 재개 상태로 전환되면 앱이 사용자와 상호작용한다.
- 최신 상태의 UI를 보여주기 위해 데이터를 갱신하거나 화면을 다시 그리는 로직, 혹은 일시 중지되었던 애니메이션을 다시 시작하는 로직을 구현해야 한다.
- 전화가 걸려오거나 사용자가 다른 활동으로 이동하여 focus를 잃기 전까지 이 상태를 유지한다.
- focus를 잃으면 일시중지 상태가 되고 시스템은 onPause() 메서드를 호출한다.
- 일시중지 상태에서 재개 상태로 돌아오면 시스템은 onResume() 메서드를 다시 한번 호출한다.
- onPause()
- 사용자의 활동이 더이상 foreground에 있지 않음을 나타낸다.
- 시스템 리소스, 센서 핸들, 필요 없는 기능 및 리소스를 해제하는 로직을 구현해야 한다.
- onPause() 메서드의 실행은 매우 짧기 때문에 부하가 높은 종료 작업은 onStop()에서 구현해야 한다.
- onStop()
- 활동이 사용자에게 더이상 표시되지 않거나 실행이 종료되려고 할 때 onStop()을 호출한다.
- 사용자에게 필요하지 않은 리소스를 해제하거나 조정하는 로직을 구현해야 한다.
- 예를 들어 애니메이션을 해제하거나 데이터베이스 저장 작업을 하면 된다.
- 애니메이션을 일시중지하거나, CPU를 많이 사용하는 종료 작업을 실행한다.
- onDestroy()
- Activity가 소멸되기 전에 호출된다.
- 사용자가 활동을 완전히 닫거나 finish()가 호출되어 활동이 종료되고 있는 경우 이 콜백이 호출된다.
- 기기 회전 또는 멀티 윈도우 모드 전환과 같은 구성 변경으로 인해 시스템이 일시적으로 활동을 소멸하는 경우 이 콜백이 호출된다.
- onStop()과 같이 이전 콜백에서 해제되지 않은 모든 리소스를 해제하는 로직을 구현해야 한다.
<aside>
📌 안드로이드 개발 시 생명 주기 측면에서 고려해야 하는 것들
</aside>
- 사용자 경험
- 화면 회전이나 다크 모드로 변경 시 액티비티가 다시 생성되므로, 사용자 데이터가 손실되지 않도록 적절하게 상태를 저장하고 복원해야 한다.
- 백그라운드 작업
- 백그라운드 작업은 작업의 시작과 중지 시점을 올바르게 관리해야 한다.
- AsyncTask, Handler, Service, WorkManager 등을 사용하여 애플리케이션의 안정성과 성능을 향상시킬 수 있다.
- 리소스 관리
- 액티비티 생명 주기 동안 메모리 누수를 방지하기 위해 적절한 시점에 리소스를 할당하고 해제해야 한다.
- ex) onPause() 에서 리스너를 해제하고, onResume() 에서 리스너를 다시 등록한다.