Image
Android/Lifecycle

Android Activity Lifecycle 정리하기 : 화면이 회전될 때 Activity Lifecycle은 어떻게 변화하는가? Activty 위에 다른 Activity가 실행될 때 Lifecycle은 어떻게 변화하는가?

목표

  • Activity의 Lifecycle에 대해 이해한다.
  • 각 수명주기에 해당하는 메서드가 언제 호출되는지 알아야 한다.

 

 

개요

안드로이드의 리소스 제한으로 인해 Activity는 항상 살아있지 못한다. Activity는 Activity가 보여주는 화면(View)이 화면 상에서 뒤로 가거나, 화면 상에서 사라지게 될 경우 특정한 메서드를 호출하게 되는데, Activity의 Lifecycle은 Activity가 각 상황에서 어떤 메서드를 호출하는지를 알려준다.

 

 

Activity Lifecycle

 

그림1. Activity의 Lifecycle [출처: developer.android.com]

onCreate()

Activity가 시작될 때 불림

 

onStart()

  • Activity가 보이기 전에 불림
  • Broadcast Receiver은 여기서 등록한다.

 

onResume()

  • Activity 일부가 보일 때 불림
  • 일부가 보일때부터 전체가 보일 때까지의 시간만큼만 수행된다.가벼운 작업만을 수행해야 한다. 만약 긴 작업을 수행한다면 버벅임이 생긴다.

 

onPause()

  • Activity가 일부는 보이지만 다른 Activity가 foreground로 나올 때 불림
  • 일부가 보이지 않게 될때부터 전체가 사라질 때까지의 시간만큼만 수행된다. 따라서 가벼운 작업만을 수행해야 한다. 만약 긴 작업을 수행한다면 버벅임이 생긴다.

 

onStop()

  • Activity가 하나도 보이지 않게 됐을 때 불림
  • Broadcast Recevier은 여기서 해제한다.

 

onDestroy()

Activity가 finish()되거나 system에 의해 destroy될 때 불림(화면이 없어진 후 시간이 오래 지났거나 할 때)

Activity가 강제 종료 될 때는 불리지 않음

 

 

Activity InstanceState Save Methods

아래 메서드들은 Activity의 Lifecycle에는 들어가지 않지만, Activity에서는 없어서는 안되는 메서드들이다. 

 

onRestoreInstanceState()

  • onStart() 이후에 불림
  • Activity가 강제 종료된 후 다시 켜질 때만 불림.(화면 회전 등) 

 

onSaveInstanceState()

  • onStop() 직전에 항상 불림

 

 

 

예시

Activity에서 다른 Activity실행

예시 다운 받기 : github.com/seyoungcho2/ActivityLifeCycleExample

\그림2. MainActivity 위에 AnotherActivity가 불릴 때 일어나는 일

상황

  • MainActivity에서 Another Activity를 호출

실행 순서

  1. D/MainActivity: onPause() called - MainActivity의 일부가 보이지 않게 된다.
  2. D/AnotherActivity: onCreate() called - Anothe rActivity가 켜졌다. 
  3. D/AnotherActivity: onStart() called - AnotherActivity가 켜지고 있다.
  4. D/AnotherActivity: onResume() called - AnotherActivity가 다 켜졌다.
  5. D/MainActivity: onStop() called - MainActivity가 화면 상에서 완전히 사라졌다.

 

*MainActivity의 onStop()은 다른 Activity가 완전히 켜져서 화면을 완전히 가리게 될 때 호출된다.

 

 

Activity화면 회전

 

D/com.example.sample.MainActivity: onPause() Called
D/com.example.sample.MainActivity: onSaveInstanceState() Called
D/com.example.sample.MainActivity: onStop() Called
D/com.example.sample.MainActivity: onDestroy() Called
D/com.example.sample.MainActivity: onStart() Called
D/com.example.sample.MainActivity: onRestoreInstanceState() Called
D/com.example.sample.MainActivity: onResume() Called

상황

  • MainActivity에서 화면 회전

실행 순서

  1. D/MainActivity: onPause() called - MainActivity의 일부가 보이지 않게 된다.
  2. D/MainActivity: onSaveInstanceState() called - Activity의 상태가 저장된다.
  3. D/MainActivity: onStop() called - Activity가 모두 보이지 않게 된다.
  4. D/MainActivity: onDestroy() called - Activity가 파괴된다.
  5. D/MainActivity: onStart() called - Activity가 다시 시작된다.
  6. D/MainActivity: onRestoreInstanceState() called - Activity가 강제 종료된 후 복구되어 State 복구 로직을 수행한다.
  7. D/ MainActivity: onResume() called - Activity가 Resume된다. 

 

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com