안드로이드 Activity 생명주기


1. Activity : 안드로이드 Application 의 기본 단위로, 사용자 인터페이스를 화면에 표시하고 사용자의 입력을받아서 처리하는 역할을 함


2. 생명 주기 (Life cycle) : Activity 는 시작, 실행, 활성, 비활성화, 정지, 종료되는 일련의 상태를 순환


3. system 은 task의 실행중인 Activity들을 stack으로 관리함

  activity 가 새로 생성되면 stack의 제일 위에 놓여 활성화 됨

  이 상태에서 다른 activity 가 또 생성되면, 기존의 activity는 잠시 가려지고 새 activity가 stack의 제일 위에 배치됨

  stack 제일 위의 activity 가 종료되면 바로 아래쪽에 잇는 activity 가 자연스럽게 활성화 될 것임

  stack 의 activity 는 넣고 빼기만 할 뿐 순서가 바뀌지 않음


4. stack activity 의 세가지 상태

   - 실행 (active, running)

     : 사용자가 직접 사용하는 상태. 스택의 제일 위에 있으며 화면상에서도 제일 위에 있음.

       입력 포커스를 가지며, 사용자의 입력을 직접 처리함

   - 일시 정지 (pause)

     : 포커스는 잃었지만 사용자에게는 보이는 상태

      위쪽에 다른 activity 가 있지만, 화면 전체를 다 가리지 않았거나 반투명한 경우가 이에 해당됨.

      살아있는 상태와 같지만 시스템에 의해 강제 종료될 수도 있음

   - 정지 (stoped)

     : 다른 activity 에 의해 완전해 가려진 상태이며, 사용자 눈에 보이지 않음

      그러나 모든 정보를 다 유지하고 있으므로 언제든 다시 활성화 될 수 있음

      system 은 메모리가 부족하면 정지 상태의 activity를 언제든지 강제 종료할 수 있음

 

5. Activity 의 전체 생명주기






- onCreate()

     : activity 를 초기화 함

      중지했다 재시작 하는 경우라면 activity 의 이전 상태 정보인 bundle 이 전달됨. 이정보대로 재초기화 함

 

   - onRestart()

     : 재시작될 때 호출 됨.

       가시 수명으로 이어지기전 acvitity 처리를 위해 호출. 항상 onStart() 호출 직전에 호출됨

 

   - onStart()

     : 액티비티가 사용자에게 보이기 직전에 호출.

 

   - onResume()

     : 사용자와 상효작용을 하기 직전에 호출됨. 이 단계에서 스택의 제일 위로 올라옴

       activity 스택의 맨 위에 있어서 activity 가 사용자에게 보여지고, 사용자의 입력을 처리할 수 있을 때 호출

 

   _ onPause()

     : 다른 activity 가 실행될 때 호출됨.

       이 단계에서 미저장한 데이터가 있으면 저장하고, 애니메이션은 중지해야 함

       이 메서드가 리턴되어야 새 activity 가 활성화 되므로 시간을 너무 많이 끌어서는 안됨

 

       즉, 활성 수명 끝에서 호출 되는데, 포커스를 잃고 이전의 activity 가 resume 되기 전에 호출됨.

       onPause() 에서는 데이터의 저장, 애니메이션의 중지, cpu 를 소비하는 작업 중단과 같은 일들을 수행해야함

       사용자가 activity 를 떠날 때 다루어야 할 매서드임

       application 실행 도중 전화가 걸려오면 그때까지의 내용을 모두 저장해야 하는데, onPause() 에서 이러한 저장과정이 진행됨

 

   - onStop()

     : 더이상activity 가 스택의 최상위에 있지않으므로 사용자에게 보이지 않게 될 때 호출됨

 

   - onDestory()

     : activity 가 파괴될 때 호출됨

       system 에 의해 강제로 종료되는 것인지 아니면 finish 메서드 호출에 의해 스스로 종료하는 것인지는 infinish 메서드로 조사 가능

       onDestory() 메서드가 호출되면 system 에서 activity 가 존재하지 않음


출처 : http://apponline.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Activity-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0




안드로이드 액티비티 생명주기 (Android Activity LifeCycle)

- 액티비티는 효율적인 메모리 관리를 위해 생성, 소멸되는 조건인 생명주기를(Lifecycle) 가지고 있다

- 생명주기는 7가지 단계로 구분되며 다음 순서를 기본으로 진행된다
  onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart() 또는 onDestroy()

- 각 상태에 따라 필요한 작업을 메소드를 오버라이드 하여 처리해주면 된다

- 여러개의 액티비티를 이용중 시스템의 리소스가 부족하면 다음상태의 액티비티를 강제로 종료시킨다
  onDestroy() - 1순위, onStop() - 2순위, onPause() - 3순위

- onPause() 상태의 Callback은(실행완료) 보장하지만, onStop()과 onDestroy()는 보장할 수 없다
  (미완료 상태에서 System이 강제종료 시킬 수 있으므로 되도록 onPause()에서 종료를 대비 해야한다)

- 강제종료된 Activity는 리소스가 확보되면 다시 복구 시킨다

- 강제종료시에는 데이터 복원를 대비하여 onPause() 실행 전 onSaveInstanceState(Bundle b) 를 실행시킨다

- 강제종료시에는 onStart() 호출 후 실행되는 onRestoreInstanceState(Bundle b) 또는 
  onCreate(Bundle b) 를 사용하여 복원작업을 수행할 수 있다

- 화면의 Orientation(가로/세로) 변경시 onDestroy()를 호출 후 onCreate()가 실행된다

 

- onCreate()
액티비티가 처음 생성될때와(화면이 회전되어 orientation이 변경될때도 기본으로 실행) 실행되며
레이아웃배치와 변수선언 등 각종 초기화 작업을 구현하는 단계이다
완료 후 onStart()를 호출한다

- onStart()
onCreate() 이후 또는 onRestart()로 다시 시작된 후 처음으로 호출하는 단계이며
화면생성이 완료되고 사용자 입력을 받기 바로 직전의 단계이다
완료 후 onResume()를 호출한다

- onResume()
onResume() 이 실행되면 상호작용이 가능하며 모든준비가 완료되고 액티비티가 완벽하게 활성 상태가 된다.
onPause()에서 다시 시작되었을때 호출하는 단계이기도 하다

- onPause()
상태에서 다른 Activity에 포커스를 넘겨준 후 비활성화(background) 되며 상호작용이 중단된 단계이다
이 상태 이후부터는 언제든지 시스템의 강제종료가 가능하며 이 상태가 완료 되어야 다음 Activity가
활성화(foreground) 되고 이후 이 액티비티는 onStop() 상태가 된다
단, 다음 Activity 의 테마가 translucent 인 투명한 배경의 Activity 와 같이 풀스크린이 아닌
Activity일 경우에는 onStop() 상태가 되지 않고 onPause()를 유지한다
하나 더 덧붙이면, 투명배경의 Activity와 비슷한 Diaglog 의 경우에는 onPause()가 적용되지 않는다

- onStop()
Activity가 사용자에게 보이지 않는 비활성화 상태로 돌아서게 되면 호출하는 단계이다
=> 다른 activity 를 활성화 시켰을때는 background로 onStop() 상태가 유지되며,
=> 현 액티비티에서 finish()를 호출하거나 back key를 이용해 home activity로 돌아갈때는
onStop() 후 onDestroy()를 호출하고
=> 다음 Activity에서 back 하여 현 액티비티로 돌아올때는 onRestart(), onStart(), onResume 순으로 호출한다

- onDestroy()
finish(), finishActivity() 같은 정상적인 종료시에 호출되며, onCreate()에서 호출한 자원의 반납등을 하는 단계이다

- onRestart()
onStop()인 비활성화 상태에서 다시 활성화되는 단계에서 발생한다


Posted by 모과이IT
,