본문 바로가기

Android Develop

[Android] 액티비티의 생명주기

728x90
반응형

안녕하세요.

이번 시간에는 액티비티의 생명주기에 대해서 알아보려 합니다.

 

액티비티는 사용자와 상호작용을 하기 위해 사용되는 컴포넌트입니다.

오늘의 날씨를 띄우거나, 모바일 신문 기사를 읽거나, 댓글을 다는 등의 작업이 액티비티에서 일어나는데요,

이번 시간에는 액티비티가 어떤 생명주기를 가지고 있는지 살펴보겠습니다.

 

 

 

 

생명주기(Lifecycle)란?

 

 

먼저 액티비티의 생명주기에 대해서 다루기 전에, 생명주기가 무엇인지에 대해서 알아보겠습니다.

 

'액티비티'라는 것이 화면에 보이기 위해서 객체가 만들어지고, 기본적인 작업을 하고, 화면에 보이게 하는 등의 역할을 하는 메소드들이 있습니다.

이렇게 컴포넌트가 생성되고, 보여지고, 끝으로는 소멸하는 과정 등이 메소드를 통해서 이루어지는데요.

이런 메소드들을 통해서 상태가 바뀌는 과정의 전체를 생명주기라고 부릅니다.

 

 

 

 

액티비티의 State

 

 

액티비티는 기본적으로 3가지의 상태를 갖고 있습니다.

생성된 액티비티는 아래의 3가지 상태들로 계속 전이하고, 마지막에 종료되는 형태로 Lifecycle을 가지게 됩니다.

 

 

액티브(Active)

 

액티비티 스택의 맨 위에 위치하고 있어, 사용자와 입력이나 터치와 같은 상호작용이 가능한 상태입니다.

액티비티가 화면의 가장 위에 있습니다.

 

 

퍼즈(Pause)

 

퍼즈는 다른 액티비티에 가려져 있어 일부만 보이는 상태로, 사용자의 터치를 처리한다던가의 상호작용은 할 수 없지만 스크린에는 보여집니다.

이 때, 액티비티를 지속하기 위해서 리소스와 필요한 정보들은 계속 유지합니다.

그러나 만약 자원 공간의 부족 등의 이유로 인해서 강제로 종료될 수도 있는 상태입니다.

 

 

스탑(Stop)

 

다른 액티비티에 가려져서 사용자에게 완전히 보여지지 않는 상태입니다.

여전히 리소스 등은 유지되지만, 메모리 부족 등의 경우에는 시스템에 의해서 강제로 종료될 수 있습니다.

퍼즈 상태보다 강제 종료되기가 더 쉽고, 만약 종료된다고 하더라도

만약 사용자가 해당 액티비티를 필요로 한다면 이전 상태를 복원해서 재시작할 수 있습니다.

 

 

 

 

생명 주기 메소드

 

 

위에서 설명했듯이, 액티비티는 3가지의 상태를 왔다갔다 하게 되는데요,

현재 상태에서 다른 상태로 전이하기 위해서 사용되는 메소드 들이 존재합니다.

메소드들은 아래와 같은 flow로 흐르면서 상태를 전이시키게 됩니다.

 

 

 

액티비티의 생명주기

 

onCreate()

 

액티비티가 처음에 생성될 때에 호출되는 메소드로, 보통 액티비티에 필요한 부분들을 초기화 해 주는 작업을 하게 됩니다.

매개변수로 Bundle을 받게 되는데, 이 Bundle은 해당 액티비티의 이전 정보를 갖고 있기 때문에 중간에 액티비티가 pause나 stop 상태가 되어도, 다시 active할 때에 이전 상태를 유지할 수 있게 됩니다.

 

 

onRestart()

 

액티비티가 stop 상태에 있을 때에 액티비티를 다시 시작하기 위해서 호출되는 메소드입니다.

예시로, A 액티비티에서 버튼을 클릭하여 B 액티비티로 넘어온 후에,

B 액티비티에서 뒤로 가기를 눌러 A 액티비티로 다시 돌아오게 되는 경우를 들 수 있습니다.

이 때 A 액티비티의 stop state에서 active state로 상태가 전이되기 때문에 onRestart() 메소드가 실행됩니다.

 

 

onStart()

 

액티비티가 사용자가 보여지기 전에 호출되는 메소드입니다. 이 시점부터 사용자가 액티비티를 볼 수 있게 됩니다.

 

 

onResume()

 

사용자와 상호작용하기 직전에 호출됩니다.

액티비티가 실제 사용자와 상호작용이 가능한 포그라운드에 위치한 상태이고, 액티비티가 화면의 가장 위로 올라오게 됩니다.

 

 

onPause()

 

다른 액티비티를 실행하기 전에 호출되는 메소드입니다.

이 메소드가 종료된 이후에야 다른 액티비티가 실행됩니다.

그러나 만약 그 다음의 액티비티가 투명한 액티비티라면, Pause에서 Stop으로 가지 않고 그 상태로 대기되게 됩니다.

그 이유는 액티비티가 완전히 가려진 것이 아닌, 일부는 투명한 액티비티 뒤로 내용이 보이는 Pause 상태이기 때문입니다.

 

 

onStop()

 

액티비티가 종료되기 전이나 다른 액티비티가 화면에 있어서 액티비티가 보이지 않을 때에 호출되는 메소드입니다.

사용자에게 해당 엑티비티가 더 이상 보이지 않습니다.

A 액티비티에서 불투명한 B 액티비티로 넘어갈 때를 A 의 액티비티가 완전히 가려지게 되는데,

이 때 A 액티비티는 onPause() -> onStop() 메소드를 거쳐 pause state -> stop state 순서대로 상태가 전이됩니다.

 

 

onDestroy()

 

메모리 확보 등의 이유로, 액티비티 객체를 소멸시키기 위해서 호출되는 메소드입니다.

 

 

 

이번 시간에는 안드로이드 액티비티의 생명 주기에 대해서 다뤄보았는데요,

만약 직접 코드를 통해서 액티비티 class 내에서 메소드들을 오버라이드 하여 로그를 찍어보는 식으로 생명 주기를 확인하는 것도 좋은 방법일 것 같습니다 :)

728x90
반응형