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

*안드로이드 시스템에서 메모리를 해제하기 위해 프로세스들을 중단시킨다.

메모리 해제를 위해 어떤 프로세스를 중단시킬지 결정할 때 시스템에서는 현재 실행 중인 모든 프로세스의 우선순위상태를 모두 고려한다.
그리고 이때 그런 요소들을 결합하여 구글에서 이야기하는 중요도 서열이라는 것을 생성한다.

<안드로이드의 프로세스 상태>


1. 포그라운드 프로세스

가장높은 수준의 우선순위이다. 프로세스가 포그라운드 상태가 되려면 다음의 자격조건을 하나 이상 충족해야 한다.
  • 사용자와 현재 상호작용중인 액티비티를 호스팅(포함해서 실행)한다.
  • 사용자와 현재 상호작용 중인 액티비티에 연결된 서비스를 호스팅한다.
  • 중단되면 사용자에게 해를 끼칠 수 있다는 거을 startForeground()메소드를 호출하여 알려준 서비스를 호스팅한다.
  • 자신의 onCreate(), onResume(), onStart()콜백 메소드 중 하나를 실행하는 서비스를 호스팅한다.
  • onReceive()메소드로 현재 실행중인 브로드캐스트 수신자를 호스팅한다.

2. 가시적프로세스

화면으로 볼 수는 있지만 사용자와 상호작용은 하지않는 액티비티를 포함하는 프로세스는 가시적 프로세스로 분류된다.

3. 서비스 프로세스

이미 시작되어 현재 실행 중인 서비스(service)를 포함하는 프로세스이다.

4. 백그라운드 프로세스

사용자가 화면으로 현재 볼 수 없는 하나 이상의 액티비티를 포함하는 프로세스다. 더 높은 우선순위의 프로세스에서 추가 메모리가 필요한 경우, 이 부류의 프로세스는 안드로이드 런타임에의해 중단될 가능성이 크다. 안드로이드는 백그라운드 프로세스내역을 동적ㅇ로 유지 관리하면서 실행 순서에 따라 프로세스를 중단시킨다.

5. 비어있는 프로세스

실행되는 애플리케이션을 포함하지 않으며, 새로 론칭되는 애플리케이션을 호스팅하기 위해 메모리에 남아있다. 문을 연 채로 엔진을 켜 놓고 탑승을 기다리는 버스와 유사하다. 리소스 해제시에 제일 먼저 중단된다.




<액티비티 생명주기>


프로세스의 상태는 자신이 호스팅하는 애플리케이션을 구성하는 액티비티와 컴포넌트의 상태에 의해 결정된ㄷ.
액티비티의 현재 상태는 액티비티의 스택 안에서의 위치에 따라 결정된다.


애플리케이션이 론칭되면 그 애플리케이션의 첫 액티비티가 스택에 놓인다. 그리고 두번쨰 액티비티가 시작되면 이전의 액티비는 밑으로 들어가고(push) 그 액티비티가 맨 위에 위치하게 된다. 스택의 맨 위에 있는 액티비티를 활성화된(또는 실행중인)액티비티라 한다.
활성화된 액티비티가 종료되면 그 액티비티는 런타임에 의해 스택에서 빠지고(pop)그 바로 밑에 있던 액티비티가 위로 올라오면서 현재 활성화된 액티비티가 된다.

액티비티가 종료디는 예를들면, 스택의 맨 위에 있는 액티비티가 자신의 할 일이 끝났을 경우나 이전 액티비티로 돌아가기 위해 사용자가 장치 화면의 Back을 눌렀을 떄이다.
만일 시스템의 리소스(메모리가)가 부족하게 될경우는 스택의 제일 밑에있는 액티비티 부터 제거된다.

액티비티 스택은(LIFO)후입선출이다.


댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기