안드로이드(Android) Activity Life Cycle안드로이드(Android) Activity Life Cycle

Posted at 2013.11.13 21:55 | Posted in == Mobile ==/Android



facebook에 글올리기



안드로이드(Android) Activity Life Cycle



어플리케이션 Component들은 각각의 Life Cycle에 따라 자신의 메모리, 리소스, 데이터 뿐만 아니라 자신의 상태도 관리해야 한다.


자연스럽게 컴포넌트들간의 화면이나 작업 전화이 가능하며, 더 이상 사용되지 않는 컴포넌트는 소멸될 수도 있다.


1. Activity 와 Task


- Task


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

이와 같은 Activity 들의 집합을 Task 라고 한다. ( 동일 프로세스 상에서 실행되는 Activity 들을 관리한다. )


- Activity Stack


Task는 이처럼 Activity가 쌓여 있는 Stack이라 하여 Activity Stack이라고도 부른다.


* 가장 위에 있는 Activity C 가 현재 화면에 보이는 Activity 이다.


① 한 안드로이드 어플리케이션을 실행하면 그 어플리케이션에 설정되어 있는 첫 시작 Activity A 가 시작되고, Task에는 Stack의 맨 위에 Activity A가 추가된다.


② 새로운 Activity B 가 시작되면 Stack 맨 위에 추가되면서, Activity A 는 정지되고 현재 화면을 Activity B 가 차지하게 된다.


③ Activity C 가 추가되면, 마찬가지로 Stack 맨 위에 추가되면서 Activity B 는 정지되고 현재 화면을 Activity C 가 차지하게 된다.


④ Activity C 를 통한 사용자 작업이 끝나면, Activity C 가 Stack에서 제거되고, Activity B 가 다시 Stack의 맨 위가 되면서 다시 시작된다.






2. Activity Lifecycle


모바일 기기라는 한정된 리소스를 가지고 있는 상황에서 모바일 기기의 리소스를 효과적으로 사용하고 리소스의 상태에 적절하게 대응하기 위해 어플리케이션의 Lifecycle 에 맞게 개발해야 한다.


* 시작된 Activity의 3가지 상태


(1) 활성화(Active) 또는 실행 중 (Running) 상태


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

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

- 이 상태의 Activity는 사용자의 초점을 가지고 있다.


(2) 멈춤 (paused) 상태


- 사용자의 초점을 가지고 있지 않지만 여전히 사용자에게 화면이 보여지고 있을 때

- 즉, 다른 Activity가 그 위에 위치하지만 그 Activity가 투명상태 또는 전체 화면을 채우지 못하고 있어서 아직은 약간이라도 Activity를 볼 수 있는 상태

- 이 상태의 Activity는 모든 상태 정보와 리소스 등을 유지하고 있지만, 극도로 메모리가 부족한 상태에서는 시스템에 의해 강제로 종료될 수 있다.


(3) 정지 (Stopped) 상태


- 다른 Activity에 의해서 완전히 가려져, 더 이상 사용자에게 보여지지 않을 때

- 이 상태의 Activity는 여전히 모든 상태 정보와 리소스 등은 유지할 수 있다.

- 그러나 멈춤 상태와 마찬가지로 극도로 메모리가 부족한 상태에서는 시스템에 의해 강제로 종료될 수 있다.



* Activity Lifecycle



① 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() 메소드에서 해제해야 한다.

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


⑤ onStop()


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


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


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


⑥ onRestart()


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


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


⑦ onDestroy()


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


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

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

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




저작자 표시 비영리 변경 금지
신고
이웃추가
facebook에 글올리기

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기