[Android] Activity 생명주기 (Activity LifeCycle)
액티비티 (Activity) 생명주기
액티비티는 액티브 상태, 포즈 상태, 스탑 상태 이렇게 3가지의 기본 상태를 가지는데요.
간단하게 3가지의 기본 상태에 대해 설명해 드리겠습니다.
액티브(Active) 상태
- 화면 맨 앞으로 나와 사용자의 액션 (터치나 데이터 입력)과 상호 작용하는 액티비티.
포즈(Pause) 상태
- 다른 액티비티로 가린 상태이지만 액티비티 일부가 사용자에게 여전히 보이는 상태.
스탑(Stop) 상태
다른 액티비티에 완전히 가려져 사용자에게 안보이는 상태.
이 상태도 살아 있는 상태로 액티비티를 유지하기 위한 정보를 유지.
포즈 상태와 스탑 상태는 메모리가 부족한 경우 시스템에 의해서 종료될 수 있고,
포즈 상태보다 스탑 상태가 종료될 확률이 더 높습니다.
만약 사용자 시스템에 의해서 종료된 액티비티를 다시 요청한다면 시스템은 액티비티의 이전 상태를 복원시켜 재 시작 합니다.
onCreate()
액티비티가 처음 생성될 때 호출됩니다. 보통 해당 메서드에서는 초기화 작업을 수행합니다.
뷰 생성이나 리스트에 데이터를 바인딩하는 동작 등을 수행합니다.
이 메서드는 Bundle 객체를 파라미터로 받는데, 객체는 액티비티의 이전 상태 정보를 갖습니다. 그래서 액티비티가 다른 액티비티에 가렸다가 다시 앞으로 나와도 이전 상태를 유지할 수 있습니다.
onRestart()
액티비티가 스탑(Stop) 되었다가 다시 시작될 때 호출됩니다.
onStart()
액티비티가 사용자에게 보여지기 전에 호출됩니다.
onResume()
사용자와 상호 작용하기 전에 호출됩니다. 이 시점은 액티비티가 화면의 가장 위로 올라온 상태입니다.
onPause()
시스템이 다른 액티비티를 실행시키려고 할 때 호출됩니다.
이 메서드에서는 데이터 변화를 저장하거나 애니메이션과 같이 CPU가 지속적으로 일을 처리해야 하는 작업을 중단합니다.
해당 메서드가 종료되어야 다음 액티비티가 실행되므로 처리 시간을 짧게 하는 것이 좋습니다.
onStop()
사용자에게 더 이상 액티비티가 보이지 않게 되었을 때 호출됩니다.
액티비티가 종료되기 전이나 다른 액티비티에 의해 액티비티가 전부 가려질 때 호출됩니다.
onDestroy()
액티비티가 소멸되기 전에 호출됩니다. 액티비티 객체가 소멸되는 것은 액티비티가 종료되거나 시스템이 메모리 확보를 위해 일시적으로 객체를 소멸시킬 때 일어납니다.
이러한 메서드들 중에서 onPause()
, onStop()
, onDestroy()
는 킬러블(Killable) 메서드입니다.
킬러블(Killable) 메서드는 메서드가 실행 중에 시스템의 자원이 부족한 상황이 되면 액티비티를 강제 종료 시킬 수 있는 상태의 메서입니다.
물론, 실행중인 메서드는 끝까지 실행하고, 리턴 후에 액티비티를 종료시킬 수 있습니다.
이 중 onPause()
메서드만 액티비티 종료 전 호출되는 것이 보장됩니다.
이 세 개의 메서드를 제외한 나머지는 시스템이 액티비티를 강제 종료하는 것에 보호됩니다.