본문 바로가기

[안드로이드] Activity 생명주기(Lifecycle) - 호출 순서

액티비티 생명주기(LifeCycle) 호출순서

두 액티비티 간 이동 시 LifeCycle 호출순서

다이얼로그 / 화면 일부 이동시 LifeCycle 호출순서

액티비티 (Activity)

  • 액티비티(Activity)는 안드로이드 4대 컴포넌트 중 하나
  • UI (사용자 인터페이스)와 가장 밀접한 관련을 갖고 있기 때문에 가장 기본이 되는 구성요소
  • 보통 App은 필수로 하나 이상의 Activity가 서로 연결된 형태로 구성
  • 액티비티(Activity)는 크게 3가지의 상태가 존재

    1. 실행 : 화면(UI) 상에 액티비티가 보여지고 있는 상태
    2. 일시정지 : 액티비티가 일부분 보이긴 하지만 다른 액티비티가 포커스를 가져간 상태
    3. 중지 : 다른 액티비티에 의해서 전부 가려진 상태 (보이지 않는 상태)

 

스택 (Stack)

  • 액티비티 관리방법으로, 스택은 데이터가 메모리에 쌓이는 구조로 표현
  • LIFO (Last In First Out)
    • 후입선출 구조 : 가장 나중에 들어온 자료가 가장 먼저 나가는 방식

Activity Stack(스택) 모습

 

생명주기 (LifeCycle)

  • 생명주기 ?
    • Activity는 생성 후 메모리에 들어가서 소멸될 때 까지 '생명주기'를 갖고 있습니다
  • 생명주기는 7가지로 구분됩니다
    1. onCreate()

       처음 액티비티가 생성될 때 호출
       이곳에서 일반적인 정적 설정을 모두 수행해야 합니다 (View 생성, DataBinding 등)
       레이아웃 연결을 위한 setContentView() 메서드도 이 부분에서 실행

    2. onStart() 

       onCreate() 이후 화면에 보이기(시작되기) 직전에 호출

    3. onResume()
       
       onStart() 이후 호출되며, 사용자와 상호작용하기 직전에 호출됩니다
       onPause에서 sharedpreferences에 임시저장한 데이터를 불러오는데 주로 사용하는 부분

    4. onPause()

       화면에서 액티비티가 일부분 가려질 때 호출 (팝업 알람, 다이얼로그 등)
       다른 액티비티로 완전 전환할 경우 호출되는 중지상태의 생명주기 중 첫번째 호출

    5. onStop()

       액티비티가 더 이상 사용자에게 보이지 않을 때 호출 (완전히 가려진 경우)
       다른 액티비티로 전환 시 스택 최상단에 다른 액티비티가 쌓여 가려지게 되면서 호출
       onStop 상태에서 back키로 이전 액티비티로 돌아가는 경우 onRestart를 호출

    6. onDestroy()

       액티비티가 소멸되기 전에 호출로,
      액티비티가 받는 마지막 호출입니다
       액티비티의 finish() 호출 또는 시스템에 의해 메모리 부족으로 소멸시킬 경우

    7. onRestart()

       액티비티가 중단되었다가 다시 시작되기 직전에 호출
       onRestart 호출 뒤에는 무조건 onStart()가 호출
       

Activity LifeCycle

 

LifeCycle 호출 순서

  • 생명주기를 어느정도 생각해보니 쉬운것 같이 느껴지고, 대충 알겠다 싶었다

    기존  onCreate - onStart - onResume                                                  - onPause - onStop
    서브                                                   - onCreate - onStart - onResume
  • 위 처럼 새로운 액티비티를 호출하면 순서대로 호출될 거라 생각했지만,
  • 실제로 작동을 해보니 서브 액티비티의 onCreate() 이전에 기존의 onPause()가 먼저 호출된다