안드로이드/Android

안드로이드 엑티비티 생명주기(Activity Life Cycle)

block_626 2022. 5. 8. 13:24

엑티비티란?

 

사용자에게 UI가 있는 화면을 제공하는 앱 컴포넌트입니다. 

안드로이드는 반드시 하나 이상의 액티비티를 포함하고 있고 , 액티비티는 생명주기 관련 메서드를 재정의하여 기능을 구현할 수 있습니다.

 

생명주기(Lifecycle)

1) 생명주기란 무엇인가?

Lifecycle은 Life + cycle의 합성어로, 삶의 순환이라고 직역할 수 있겠다. 말 그대로 탄생하고 성장하여 죽음에 이르기까지의 과정이라고 생각한다면, 이것을 안드로이드 앱에 적용한 것이 바로 Android Lifecycle이다. Activity, Fragment, Service 총 세가지 종류의 Lifecycle이 있으며 오늘은 그 중 Activity의 Lifecycle에 대해서만 포스팅하도록 하겠다.

2) 생명주기가 필요한 이유

예를 들어보자. 당신은 지금 여자친구와 카톡을 하고 있다. 그런데 갑자기 친구가 술먹자며 나오라고 전화를 했다. 당신이 전화를 받는순간 전화창이 화면에 보일 것이다. 그러다 약속을 잡고 전화를 끊고 다시 카톡을 실행하면 화면에 카톡창이 보일 것이다.

위 예시를 보자.
카톡 실행중 -> 카톡 닫고 전화 실행 -> 전화 실행중 -> 전화 끊고 카톡 실행 -> 카톡 실행중
위와 같은 로직이 나오게 된다. 사용자들은 그저 실행과 종료를 통해 해당 로직을 파악할 수 있지만, 우리의 안드로이드는 그러지 못한다. 그렇기에 Lifecycle이라는 개념을 넣어 안드로이드 프로그램의 상태 변화를 파악하고 반응할 수 있게 한 것이다.


액티비티 생명주기(Activity Lifecycle)

위 사진은 안드로이드 4대 컴포넌트 중 하나인 Activity의 Lifecycle 순서도이다.


생명 주기 메서드

1) onCreate()

  • Activity가 생성되면 가장 먼저 호출됨
  • 화면 Layout 정의, View 생성, Databinding 등은 이곳에 구현함
  • 생명주기 통틀어서 단 한 번만 수행되는 메소드
  • 따라서 Activity 최초 실행에 해야하는 작업을 수행하기에 적합함

2) onStart()

  • Activity가 화면에 표시되기 직전에 호출됨
  • 화면에 진입할 때마다 실행되어야 하는 작업을 이곳에 구현함

3) onResume()

  • Activity가 화면에 보여지는 직후에 호출됨
  • 현재 Activity가 사용자에게 포커스인 되어있는 상태

4) onPause()

  • Activity가 화면에 보여지지 않은 직후에 호출됨
  • 현재 Activity가 사용자에게 포커스아웃 되어있는 상태
  • 다른 Activity가 호출되기 전에 실행되기 때문에 무거운 작업을 수행하지 않도록 주의해야함
  • 영구적인 Data는 이곳에 저장

5) onStop()

  • Activity가 다른 Activity에 의해 100% 가려질 때 호출되는 메소드
  • 홈 키를 누르는 경우, 다른 액티비티로의 이동이 있는 경우가 있음
  • 이 상태에서 Activity가 호출되면, onRestart() 메소드가 호출됨

6) onDestroy()

  • Activity가 완전히 종료되었을 때 호출되는 메소드
  • 사용자: finish(), onBackPressed()(기존 액티비티의 onResume()까지 호출된 후 onDestroy() 호출)
  • 시스템: 메모리부족(프로세스 종료)
  • onStop(), onDestroy() 메소드는 메모리 부족이 발생하면 스킵될 수 있음

7) onRestart()

  • onStop()이 호출된 이후에 다시 기존 Activity로 돌아오는 경우에 호출되는 메소드
  • onRestart()가 호출된 이후 이어서 onStart()가 호출됨

생명 주기 호출

 

액티비티는 인스턴스 생성과 동시에 생성 관련 생명 주기 메서드가 순차적으로 호출됩니다.

액티비티를 종료하면 소멸과 관련된 생명 주기 메서드가 순차적으로 호출됩니다.

액티비티 생성

  1. onCreate() → 생성된 화면 구성요소를 메모리에 로드
  2. onStart(), onResume() → 화면의 구성요소를 나타내고 사용자와 상호작용 시작(Resumed: 실행 중)

 

액티비티 화면에서 제거

  1. onPause(), onStop() → 뒤로 가기, finish()를 실행할 때 동시에 실행
  2. onDestory() → 최종적으로 액티비티가 메모리에서 제거

 

액티비티를 종료하지 않고 다른 액티비티 실행

  1. onPause(), onStop() → 현재 액티비티를 종료하지 않고 새로운 액티비티가 만들어질 때(Stopped)
  2. onStart(), onResume() → 두 메서드가 연속적으로 실행되고 Resumed 상태로 변경

 

액티비티를 종료하지 않거나, 모두 가려지지 않을 때 다른 액티비티 실행

  1. onPause() → 완전히 사라진 것은 아니므로 Paused 상태로 변경
  2. onResume() → 정지가 아니니 onStart를 거치지 않고 바로 onResume로 Resumed

'안드로이드 > Android' 카테고리의 다른 글

[Android] 안드로이드 HTTP 통신  (0) 2022.07.29
RecyclerView  (0) 2022.05.31
안드로이드 4대 컴포넌트(구성요소)  (0) 2022.05.08