본문 바로가기

Programming/Android

[Android] 안드로이드 Activity와 Activity Life Cycle

Activity - 화면을 구성하는 기본 단위로서 한 화면을 보여주는 역할


이전 포스팅에서 간단히 말했던 Activity 의 설명이다. 지난 포스팅에서 언급했던 중요 구성요소들에 대해서 하나씩 설명을 해볼까 한다. 이번 포스팅은 그 중 제일 기본이라고 할 수 있는 Activity에 관한 설명과 그 생명 주기에 관한 내용이다.


액티비티는 화면의 기본 단위 라고 대부분의 웹문서에서 설명하지만, 사실 실제로는 화면을 보여주는 단위가 아닌 화면을 구성하는 view를 다양한 컨트롤을 이용하여 배치하는 이벤트를 처리하는 컴포넌트다.


실제로 안드로이드 스튜디오를 만들어 보면 view에 해당하는 소스코드는 xml로 이루어져 있고 activity는 그 xml과 연동을 시켜 해당 화면을 보여줌을 알 수 있다. 그러므로 정확히 말하면 액티비티는 화면을 그리는 xml을 다양한 컨트롤을 이용하여 자신에게 배치하는 역할을 하는 것이라고 이해하면 쉽다.


Activity Life Cycle - 액티비티 생명 주기


Application Component 들은 각각의 Life Cycle에 따라 자신의 메모리, 리소스, 데이터 뿐만 아니라 자신의 상태도 관리해야 하며, 자연스럽게 컴포넌트들간의 화면이나 작업 전환이 가능해지고, 더 이상 사용되지 않는 컴포넌트는 소멸하게 된다.


Runtime 시점에서는 Application 간의 경계가 무의미하며, 비록 서로 다른 어플리케이션에 존재하는 Activity라 하더라도, 함께 실행되는 Activity들 간에는 유기적인 연관 관계가 생성된다. 이러한 연관 관계를 Task라고 한다.


시작된 Activity는 세가지의 상태로 나눌 수 있다.


1. Active or Running

 - Activity 가 전면에 나와 실행되고 있을 때,

 - 현재 Task에 대한 Activity Stack의 최상위에 존재하고 있을 때,

 - 유저의 Focus를 지니고 있을 때.


2. Paused

 - 사용자의 Focus를 가지고 있지는 않지만 여전히 실행중인 상태 -> 다른 Activity가 그 위를 덮고 있지만 해당 Activity가 투명상태이거나, 약간이라도 사용자가 볼 수 있는 상태일때.


3. stopped

 - 다른 Activity에 의해서 완전히 가려져 더 이상 사용자에게 보여지지 않을 때. -> 이 상태의 Activity는 시스템에 의해 제거되기 전까지는 리소스와 상태정보를 유지하고 있음. 그러나 극도로 메모리가 부족한 상황이 발생할 경우 최우선적으로 강제종료됨.



① onCreate() 

- Activity가 생성되어 시작될 때 처음으로 호출되는 메소드, Activity의 리소스 초기화, 레이아웃 및 데이터 바인딩 등의 초기 설정 작업 수행

- onCreate() 메소드에서는 Bundle 객체를 매개변수로 받아오는데, 새로 시작된 Activity의 경우 null 값이 전달됨, 그러나 해당 Activity가 멈춤이나 정지상태에서 메모리 상의 이유로 강제로 종료되었다가 다시 시작하는 경우라면, 이 Bundle 객체에는 해당 Activity의 이전 상태 정보가 들어있을 것이며, 이 정보를 이용해서 이전 상태로 복원이 가능함.


② onStart()

- Activity가 사용자에게 화면을 보여줄 준비가 되었을 때 호출되는 메소드, 주로 사용자에게 Activity를 보여주기 위해 필요한 리소스들을 설정함.


③ onResume()

- Activity가 Activity Stack의 최상위에 놓여서 사용자에게 화면을 보여주고 사용자의 입력을 처리할 수 있을 때 호출되는 메소드

- 오디오나 동영상, 애니메이션 등과 같이 화면 맨 앞에서 실행되고 있을 때만 필요한 리소스들을 설정하기 좋은 메소드


④ onPause()

- Activity가 사용자 초점을 잃었을 때 호출되는 메소드

- onResume()에 대응되는 한 쌍의 메소드로서, onResume() 메소드가 호출된 후 onPause() 메소드가 호출되기 까지를 포어그라운드 라이프사이클(Foreground Lifecycle)이라고 부른다.

- onResume() 메소드에서 설정했던 리소스들은 반드시 onPause() 메소드에서 해제해야 한다.


ex) onResume() 메소드에서 재생을 시작한 오디오나 동영상, 애니메이션을 중단해야 하고, DB와 같은 리소스들도 해제해야 함.


⑤ onStop()

- 다른 Activity가 Activity Stack의 최상위에 놓이면서, 현재 Activity는 더 이상 화면에 보이질 않게 될 때 호출되는 메소드

- onStart() 메소드에 대응되는 한 쌍의 메소드이며, onStart() 메소드가 호출된 후 onStop() 메소드가 호출되기까지를 비저블 라이플사이클(Visible Lifecycle)이라고 부른다.

- onStart() 메소드에서 설정했던 리소스들(사용자에게 Activity를 보여주기 위해 설정한 리소스들)은 반드시 onStop() 메소드에서 해제해야 한다.


⑥ onRestart()

- Activity가 더 이상 화면에 보이지 않게 되었다가 다시 화면을 보여줘야 할 때 호출되는 메소드

- onStart()가 호출되기 전에 필요한 설정 작업을 수행함.


⑦ onDestroy()

- Activity가 파괴되기 전에 호출되는 메소드

- onDestroy() 메소드가 호출되는 경우 

-> Activity가 스스로 종료하려고 하는 경우

-> 메모리 부족으로 안드로이드 플랫폼이 Activity를 강제로 죽이려 하는 경우

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

Fragment - 4. 액티비티와의 통신  (0) 2017.02.15
Fragment - 3. 관리  (0) 2017.02.15
Fragment - 2. 사용  (0) 2017.02.15
Fragment - 1. 서론  (0) 2017.02.15
[Android] 안드로이드의 주요 개념  (0) 2016.06.22