본문 바로가기
IT 기술/Android

[Android] Activity Lifecycle

by Geunny 2020. 7. 27.
반응형

Activity 개념

  • `Activity`는 App을 구성하고 있는 화면을 지칭한다.

  • 화면을 표현하고 관리하기 위한 `class` 이다.

  • 화면을 표현할 때는 `Activity`하나와 하나 이상의 `XML`파일이 필요하다.

  • `Activity`내에서 자바코드로 화면구성을 다 할 수는 있으나 권장되지 않는다.

    • 표현과 구현이 분리되지 않기 때문이다.

 

 

 

활동 수명 주기 개념

활동 수명 주기 단계 간에 전환하기 위해 활동 클래스는

6가지 콜백으로 구성된 핵심 집합의 

onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()를 제공한다.

활동이 새로운 상태에 들어가면 시스템은 각 콜백을 호출한다.

 

onCreate()

 

onCreate() 메서드는 어플리케이션을 처음 시작하여

Activity를 처음 실행하였을 때

해당 Activity가 현재 만들어 지지 않았다면

새로 만들어 내는(즉, 화면을 그려내는) callback method이다.

 

정확히 말하자면 Activity 가 화면에 나타나기 위해 객체화 되어야 하고, 

Activity가 객체화(instace 화) 될때 onCreate() method가 callback 된다.

 

onCreate() 에서는 주로 화면에 표시될 Component들 (TextView와 같은)의

인스턴스를 받아오는 과정이 진행된다.

 

중요한 점은 onCreate() 에서 생성한 reference 객체들은 onCreate()가 종료됨과 동시에 소멸하고

onStart() 매서드를 호출하게 된다. (callback Method)

 

 

onStart()

onStart() 매서드는 정확히 Activity의 화면이

사용자에게 보여지기 직전에 실행되는 call back 매서드이다.

onCreate() 에서 만들어진 Activity를 화면에 나타나게 해주는 매서드이다.

 

보통 회원가입 등이 필요한 기능에서 리스너 객체 등을 onCreate에서 선언하고 onStart에서 선언된 리스너를 등록한 후, 이미 로그인 된 사용자인지를 구분하여 로그인 화면으로 넘어가지 않고 바로 메인으로 넘어가게 할 때 사용한다. 브로드캐스트리시버를 사용할 때도 보통 여기다가 등록한다.

 

onStart() 매서드는 실행과 동시에 수행후 종료되면서 onResume() 매서드를 callback 한다.

 

 

onResume()

onResume() 은 Documentation 에서 사용자와 상호작용 하는 단계라고 정의되어 있다.

즉, 어플리케이션이 실제 화면에 보여지고 있는 상태라 할 수 있다.

onCreate() 와 다르게 onResume()은 상태가 계속 유지가 되어 reference 변수들이 소멸되지 않고 존재하게 된다.

 

 

또한 홈버튼 클릭 후 다시 해당 앱으로 돌아왔을 때 위의

onCreate() 와 onStart() 를 수행하지 않고 바로 onResume() 을 실행하게 된다.

 

(이러한 행동은 쓸데 없는 객체들을 메모리 할당할 여지가 있고,

이는 GC를 불러일으키는 나쁜 코딩이 될 수도 있습니다.)

 

 

onPause()

시스템은 사용자가 활동을 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출한다.

여기서 활동을 떠났다는 의미는 해당 Activity가 포그라운드를 벗어 났을때를 의미한다.

 

onPause() 메서드의 실행이 완료되더라도 활동이 일시중지됨 상태로 남아 있을 수 있다. 오히려 활동은 다시 시작되거나 사용자에게 완전히 보이지 않게 될 때까지 이 상태에 머무르게 된다. 활동이 다시 시작되면 시스템은 다시 한번 onResume() 콜백을 호출한다. 활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템은 Activity 인스턴스를 메모리에 남겨두고, 시스템이 onResume()을 호출할 때 인스턴스를 다시 호출한다. 이 시나리오에서는 최상위 상태가 재개됨 상태인 콜백 메서드 중에 생성된 구성요소는 다시 초기화할 필요가 없다. 

 

즉, 현재 Activity 위에 다른 Acitivity 가 올라오거나

해당 Activity가 다른 것으로 살짝이라도 가려진 상황이라면 

onPause() 상태에 들어가게 된다.

활동이 완전히 보이지 않게 되면 시스템은 onStop()을 호출한다.

(예 - 알람이 울린상황, 상단탭을 내린상황.)

 

 

 

onStop()

활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고,

시스템은 onStop() 콜백을 호출합니다.

이는 예를 들어 새로 시작된 활동이 화면 전체를 차지할 경우에 적용됩니다.

시스템은 활동의 실행이 완료되어 종료될 시점에 onStop()을 호출할 수도 있습니다.

 

따라서 홈키를 눌렀다가 앱을 다시 돌아오게 되면

onPause() -  onStop() - onResume()

순서로 매서드 callback 이 진행된다.

 

 

onRestart()

onRestart()는 Activity가 정지된 후(onStop() 후) 다시 시작하기 전에 호출된다.

onRestart()가 호출된 후에는 onStart()가 호출되는데 이 때에는 강제종료가 불가능하다.

 

onDestroy()

onDestroy()는 활동이 소멸되기 전에 호출됩니다. 시스템은 다음 중 하나에 해당할 때 이 콜백을 호출한다.

 

(사용자가 활동을 완전히 닫거나 활동에서 finish()가 호출되어) 활동이 종료되는 경우

구성 변경(예: 기기 회전 또는 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우

 

활동이 소멸됨 상태로 전환하면 이 활동의 수명 주기와 연결된 모든 수명 주기 인식 구성요소는 ON_DESTROY 이벤트를 수신한다. 여기서 수명 주기 구성요소는 활동이 소멸되기 전에 필요한 것을 정리할 수 있다.

 

 



 

Activity Lifecycle

 

 

안드로이드 Docs - https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

 

댓글