Android

Android - Activity (액티비티) - Activity 이해 및 Lifecycle

TechNote.kr 2016. 1. 2. 00:30
728x90

. 일종의 App의 구성요소

. 사용자와 상호작용을 하기 위한 하나의 화면

(가득 채울 수도 있고, 다른 창 위에 작게 띄울 수도 있음)


 App은 여러개의 Activity가 묶여 있는 형태로 Main Activity가 있고, 이 Activity 가 App 실행시 기본적으로 표시되게 된다. App내의 각 Activity는 다른 Activity를 호출할 수 있고, 새로운 Activity가 호출될 때 마다 이전 Activity는 Stack에 보관하게 된다.


 사용자가 Back key를 누르게 되면 이전 Stack에 보관된 Activity가 하나씩 resume 되게 된다.


Activity Lifecycle 의 이해


우선 Activity는 기본적으로 3가지의 상태로 존재한다.


Activity 상태 종류.

 Resumed

 현재 화면에 표시되어 사용 중인 상태 

 Paused

 다른 Activity가 최상위에 올라와 있지만 Paused된 Activity는 부분적으로 뒤에 나타나 있음. 

 Stopped

 다른 Activity에 의해 완전히 가려진 상태


 Paused, Stopped 는 메모리가 부족할 경우 시스템이 중단시킬 수 있고, 이 경우 다시 열리제 되면 처음부터 다시 생성하게 된다.


Activity Lifecycle.


[출처 : developer.android.com]

 

Activity는 수명 주기에 따라 7가지의 callback function이 호출될 수 있다.

Method 이름

설명 

완료 후

 중단 가능성 

다음 호출

method 

 onCreate() 

 Activity가 호출되면 가장 먼저 호출

 해당 Activity의 일반적인 설정을 수행한다.

N

 onStart()

     onRestart()

 Activity가 중단되었다가 시작되기 직전에 호출

N

 onStart()

     onStart()

 Activity가 사용자에게 표시되기 직전에 호출.

 호출 직후 Activity가 전경에 표시되면 onResume()이 호출되고, 호출되었지만 전경에 표시되지 못하고 숨겨져 버리면 onStop()이 호출.

N

 onResume()

 onStop()

         onResume()

 Activity가 표시되고, 사용자와 상호작용 직전 호출.

N

 onPause()

         onPause()

 다른 Activity가 호출되기 직전에 호출

Y

 onResume()

 onStop()

     onStop()

 Activity가 더이상 사용자에게 표시되지 않게 되면 호출. 다시라도 Activity가 재개되면 onRestart()가 따라오고, Activity가 사라지면 onDestroy()가 따라옴.

Y

 onRestart()

 onDestory()

 onDestroy() 

 Activity가 소멸되기 전에 호출.

Y

 

 

 

 위의 수명 주기를 보면 크게 3가지의 Sub 주기를 확인할 수 있다.


-. Entire Lifetime (전체 수명, App 자체의 시작과 끝을 의미)

 onCreate() 와 onDestroy() 사이를 말함. 

 onCreate() : Layout 설정등 전체 상태의 설정을 수행

 onDestroy() : 모든 설정된 resource를 해제


-. Visible Lifetime (가시적 수명, App이 사용자에게 눈에 보이는 동안을 의미)

 onStart() 와 onStop() 사이를 말함.

 해당 주기가 사용가에게 UI를 보여주는 주기를 의미함으로, Activity가 사용자에게 보였다 안보였다 할 때, App자체는 onDestroy()를 통해 종료되지는 않지만 onStop(), onStart()이 여러번 호출될 수 있음.

 onStart() : BroadcastReceiver 등록, 화면 표시에 영향을 미치는 변화를 모니터링

 onStop() : 다른 Activity가 호출되면, 이 Activity는 onStop()을 실행하여 각종 등록을 해제


-. Foreground Lifetime (전경 수명, App이 화면의 제일 앞에 나타나는 동안을 의미)

 onResume() 과 onPause() 사이를 말함.

 위에 설명한 Activity 상태 중 Paused와 Stopped가 있는데 Stopped상태가 Visible Lifetime의 경우를 말한다면 Paused상태는 Foreground Lifetime의 경우를 말한다.

 onResume() : 해당 Activity가 화면 제일 앞에 나타날 경우 호출됨.

 onPause() : 해당 Activity가 화면 제일 앞에 있다 뒤로 들어갈 때 호출됨.



Activity 상태 저장에 관해서


Activity가 pause가 되거나 stop되더라고 destroy가 된 것은 아니기 때문에 Activity가 가진 모든 정보는 기본적으로 memory에 남아 있어 이후에 Activity가 resume, start 되더라도 해당 정보를 그대로 가져올 수 있다.

하지만 paused, stopped된 상태에서 시스템의 메모리가 부족하여 시스템에 의해 Activity가 destroy되게 되어 버리면 메모리상에 남아 있지 않기 때문에 이후 다시 Create될 때는 모두 초기화되게 되어 버리는 문제가 있다.


이를 위해 onSaveInstanceState(), onRestoreInstanceState() 를 사용해 Activity가 시스템에 의해 강제로 죽게 되더라도 정보를 저장하고 복구하게 할 수 있다. 아래와 같은 flow로 동작하게 된다.


[출처 : developer.android.com]

728x90