Tech Log

[Android] 안드로이드 액티비티 생명주기 본문

Android/Kotlin

[Android] 안드로이드 액티비티 생명주기

yuhee kim 2022. 3. 2. 11:55

개요 : 리액트를 공부할 때도 들었던 의문이었지만, 왜 생명주기란 것이 있는지 궁금했었다. 이번에 안드로이드를 공부하면서 생명주기라는 것이 왜 있는지 알게되었고 각 각의 단계들이 어떤 때에 일어나는지 알아보게 되었다.

 

액티비티 생명 주기가 필요한 이유

사용자는 앱을 사용할 때 중간에 나갈 수도 있고 다시 돌아갈 수도 있다. 이러한 상황 속에서 액티비티 클래스는 시스템의 상태 변화를 알아차릴 수 있게끔 콜백을 제공한다. 아래와 같은 상황을 예방하기 위해서 생명 주기 콜백을 사용하는 것이다.

 

  • 앱을 사용하고 있는데 전화가 걸려와서 앱이 비정상 종료되는 문제
  • 앱을 나갔다가 돌아왔을 때 사용자의 진행 상태가 저장되지 않는 문제
  • 앱을 사용하고 있는 도중 다른 앱으로 전환했을 때 앱이 비정상 종료되는 문제
  • 앱의 세로 화면과 가로 화면의 전환이 일어났을 때 앱이 비정상 종료/사용자의 진행 상태가 저장되지 않는 문제
  • 앱을 활발하게 사용하지 않는데도 시스템의 자원이 소비되는 문제

 

 

출처 : Android Developers (https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko)

 

위 콜백들이 실행되는 동안 시스템에서 일어나는 일들을 구현할 수 있다.

 

1) 액티비티 실행

응용 프로그램이 실행되면 onCreate(), onStart(), onResume() 순으로 메소드가 수행된다. 그리고 메인 액티비티의 화면이 나오게 된다. 여기서 onCreate() 메소드는 생성될 때 한 번만 수행된다. 

 

2) 액티비티 종료

  • 메인 액티비티를 끝내면 onPause(), onStop(), onDestroy() 메소드가 차례대로 수행되며 응용 프로그램이 종료된다.
  • 메인 액티비티 실행 중에 다른 액티비티를 불러오면 onPause(), onStop() 메소드가 수행되고 메인 액티비티가 중지된다. 만약 이 또 다른 액티비티를 종료하게 되면, onRestart(), onStart(), onResume() 메소드가 수행되고 메인 액티비티가 나오게 된다.

 

생명주기 메소드

onCreate() 시스템이 먼저 액티비티를 생성할 때 실행되는 것으로, 구현 필수
onStart() 액티비티가 시작됨 상태로 전환됨. 앱은 액티비티를 포그라운드에 보내 상호작용할 수 있도록 준비
onResume() 액티비티가 재개됨 상태로 전환됨.  어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때가 해당됨. 일시중지 상태(onPause() 메소드가 호출된 상태)에서 액티비티가 재개되면, 해당 메소드가 호출됨.
onPause() onResume()에서 방해되는 이벤트(화면 꺼짐, 사용자가 다른 액티비티로 이동 등)가 발생하면 해당 메소드가 호출됨. 액티비티가 일시중지 상태에 들어감.
onStop() 액티비티가 더이상 사용자에게 표시되지 않는 상태. 중단된 상태에 들어간다. 새로운 액티비티가 화면 전체를 차지할 때, 해당 메소드가 호출됨.
onDestroy() 액티비티가 소멸되기 직전 호출됨. 
  1. (사용자가 액티비티를 완전히 닫아 / finish()가 호출되어) 액티비티가 종료되는 경우
  2. 구성 변경(기기 회전 / 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 액티비티를 소멸시키는 경우

    위 경우에 따르면, onDestroy() 메소드가 호출됨
onRestart() 액티비티가 다시 사용자에게 나타날 때 사용됨.
onStop() 이후에 다시 액티비티를 시작할 때 호출됨.

 

참조
  • Android Developers
  • 코틀린을 활용한 안드로이드 프로그래밍, 한빛아카데미, 우재남 유혜림

'Android > Kotlin' 카테고리의 다른 글

[Kotlin] 코틀린 언어 특징  (0) 2022.06.27
[Android] Coroutine 개념  (0) 2022.05.11
[Android] View Binding  (0) 2022.04.06
Comments