액티비티 (Activity) 생명주기

액티비티는 액티브 상태, 포즈 상태, 스탑 상태 이렇게 3가지의 기본 상태를 가지는데요.

간단하게 3가지의 기본 상태에 대해 설명해 드리겠습니다.

  1. 액티브(Active) 상태

    • 화면 맨 앞으로 나와 사용자의 액션 (터치나 데이터 입력)과 상호 작용하는 액티비티.
  2. 포즈(Pause) 상태

    • 다른 액티비티로 가린 상태이지만 액티비티 일부가 사용자에게 여전히 보이는 상태.
  3. 스탑(Stop) 상태

    • 다른 액티비티에 완전히 가려져 사용자에게 안보이는 상태.

    • 이 상태도 살아 있는 상태로 액티비티를 유지하기 위한 정보를 유지.

포즈 상태와 스탑 상태는 메모리가 부족한 경우 시스템에 의해서 종료될 수 있고,

포즈 상태보다 스탑 상태가 종료될 확률이 더 높습니다.

만약 사용자 시스템에 의해서 종료된 액티비티를 다시 요청한다면 시스템은 액티비티의 이전 상태를 복원시켜 재 시작 합니다.

Android activity life cycle

  • onCreate()

    액티비티가 처음 생성될 때 호출됩니다. 보통 해당 메서드에서는 초기화 작업을 수행합니다.

    뷰 생성이나 리스트에 데이터를 바인딩하는 동작 등을 수행합니다.

    이 메서드는 Bundle 객체를 파라미터로 받는데, 객체는 액티비티의 이전 상태 정보를 갖습니다. 그래서 액티비티가 다른 액티비티에 가렸다가 다시 앞으로 나와도 이전 상태를 유지할 수 있습니다.


  • onRestart()

    액티비티가 스탑(Stop) 되었다가 다시 시작될 때 호출됩니다.


  • onStart()

    액티비티가 사용자에게 보여지기 전에 호출됩니다.


  • onResume()

    사용자와 상호 작용하기 전에 호출됩니다. 이 시점은 액티비티가 화면의 가장 위로 올라온 상태입니다.


  • onPause()

    시스템이 다른 액티비티를 실행시키려고 할 때 호출됩니다.

    이 메서드에서는 데이터 변화를 저장하거나 애니메이션과 같이 CPU가 지속적으로 일을 처리해야 하는 작업을 중단합니다.

    해당 메서드가 종료되어야 다음 액티비티가 실행되므로 처리 시간을 짧게 하는 것이 좋습니다.


  • onStop()

    사용자에게 더 이상 액티비티가 보이지 않게 되었을 때 호출됩니다.

    액티비티가 종료되기 전이나 다른 액티비티에 의해 액티비티가 전부 가려질 때 호출됩니다.


  • onDestroy()

    액티비티가 소멸되기 전에 호출됩니다. 액티비티 객체가 소멸되는 것은 액티비티가 종료되거나 시스템이 메모리 확보를 위해 일시적으로 객체를 소멸시킬 때 일어납니다.



이러한 메서드들 중에서 onPause(), onStop(), onDestroy()킬러블(Killable) 메서드입니다.

킬러블(Killable) 메서드는 메서드가 실행 중에 시스템의 자원이 부족한 상황이 되면 액티비티를 강제 종료 시킬 수 있는 상태의 메서입니다.

물론, 실행중인 메서드는 끝까지 실행하고, 리턴 후에 액티비티를 종료시킬 수 있습니다.

이 중 onPause() 메서드만 액티비티 종료 전 호출되는 것이 보장됩니다.

이 세 개의 메서드를 제외한 나머지는 시스템이 액티비티를 강제 종료하는 것에 보호됩니다.