본문 바로가기

Mobile/Android

[ Android ] 안드로이드 생명주기 (Life Cycle)

반응형

 

앱을 만들 때 생명주기를 적절하게 사용하는 것은 매우 중요하다.

앱이 멈추거나, 불가피하게 종료가 되거나, 다시 시작되거나 하는 등의 상황에 대해서

적절하게 처리할 수 있기 때문이다. 

 

액티비티의 대표적인 상태 정보는 다음과 같다.

상태 설명
실행(Running) 화면상에 액티비티가 보이면서 실행되어 있는 상태.
액티비티 스택의 최상위에 있으며 포커스를 가지고 있음
일시 정지(Paused) 사용자에게 보이지만 다른 액티비티가 위에 있어 포커스를 받지 못하는 상태.
대화상자가 위에 있어 일부가 가려진 경우 해당함
중지(Stopped) 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태.

이렇게 액티비티의 상태 정보가 변화하는 것을 액티비티의 생명주기(Life Cycle) 또는 수명주기라고 하며,

액티비티의 상태가 변화하면서 각각에 해당하는 메서드가 자동으로 호출된다.

 

생명주기 메서드는 다음과 같이 6가지가 있다.

| onCreate

액티비티가 처음에 만들어졌을 때 호출된다. 

화면에 보이는 뷰들의 일반적인 상태를 설정하는 작업을 한다.

뷰에 대한 클릭 리스너는 여기에서 설정해주도록 한다.

| onStart

액티비티가 화면에 보이기 바로 전에 호출된다.

보통 네트워크 통신을 통해 데이터를 받아오는 작업이나,

서비스 또는 리스너 등록 등의 작업을 한다.

| onResume

액티비티가 사용자와 상호작용하기 바로 전에 호출된다.

액티비티가 멈췄다가 다시 실행될 때 필요한 작업을 한다.

| onRestart

액티비티가 중지된 이후에 호출되는 메서드로 다시 시작되기 바로 전에 호출된다.

거의 사용되지 않는 메소드이다.

| onStop

액티비티가 사용자에게 더 이상 보이지 않을 때 호출된다.

액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출된다.

서비스 혹은 쓰레드, 백그라운드 동작을 제어하는 작업을 한다.

| onDestroy

액티비티가 소멸되어 없어지기 전에 호출된다.

메모리 낭비가 될 수 있는 자원을 해제해주는 작업을 한다.

 

 

액티비티 생명주기 순서

 

| onCreate vs onStart

처음 개념을 익힐 때, 둘의 차이를 느끼지 못할 수 있다.

'onStart()에서 해야할 작업을 onCreate()에서 해주면 되지 않나?' 생각할 것이다.

하지만 차이는 분명히 있다.

 

onCreate()에서는 액티비티가 실행될 때 딱 한 번만 처리해도 되는 작업을 해주면 된다.

위에서 말했듯이, 레이아웃이나 클릭 리스너는 처음에만 설정해두면 계속 사용할 수 있다.

 

onStart()의 경우에는 onStop()이 된 이후에 다시 진행할 작업에 중점을 두어야한다. 

액티비티가 멈췄다가 재실행 됐을 때, 데이터를 다시 받아오거나 서비스를 다시 실행하거나 하는 등의 작업이 해당된다.

 

 

| onStart vs onResume

두 메소드의 차이는 액티비티 화면이 전체 다 가려졌냐 일부만 가려졌냐이다.

 

쉽게 말하자면 onStop()은 보고있던 화면이 완전히 가려졌을 때 호출된다.

전화가 온다거나, 다른 액티비티가 실행된다거나 하는 게 이에 해당된다.

 

반면 onPause()는 액티비티 화면의 일부가 가려졌을 때 호출된다.

알람이 울리거나, 메세지가 와서 포커스가 잠시 다른 데로 갔을 때나

다이얼로그 같은 뷰가 화면에 떴을 때가 이에 해당된다.

 

 

 

반응형