모든 프로세스는 생명주기(life cycle)가 있습니다. OS도 예외는 아닙니다. 프로세스를 시작하고 프로세스를 종료하기까지는 수없이 많인 이벤트와 시스템콜 그리고 모듈러 등이 동작하게 됩니다. 이러한 일련의 과정을 수행하면서 프로세스가 태어나고 죽게 되는데 안드로이드도 예외는 아닙니다. 안드로이드는 내부적으로 리눅스 위에 자바언어를 이용한 안드로이드 플렛폼을 얹었기때문에 안드로이드만의 고유한 생명주기를 갖고 있습니다.
아래 그림은 안드로이드 개발자 사이트에서 제공하는 사진입니다.
다이어그램으로 안드로이드의 생명주기를 표현했는데 일단 이 그림을 이해하기 전에 액티비티에 관하여 잠깐 설명드리겠습니다.
액티비티(activity)란 안드로이드 화면에 보이는 뷰를 말합니다. 자세히 말하자면 현재 안드로이드폰에서 웹 브라우저를 실행하거나, 바탕화면으로 나오거나, 웹서핑도중 경고메시지가 뜨거나 하는등의 에플리케이션의 한 화면을 뜻합니다. 보통 화면을 구성하는 것은 레이아웃파일에서 하고 동작을 처리하는것은 코드부분에서 이루어집니다. 이러한 액티비티는 몇가지 상태를 갖게되는데 이러한 상태는 WinAPI프로그래밍을 해보셨다거나 OS과목을 들으셨던 분이라면 쉽게 이해할수 있습니다.
■ Launched : 안드로이드 어플리케이션이 시작된 초기상태입니다.
- Launched 이후 바로 Resumed 됩니다.
■ Resumed : 액티비티가 스크린에 올라와 사용자와 상호작용가능한 상태입니다.
■ Paused : 다른액티비타가 Resumed 상태로 진입했지만 여전히 이전 액티비티가 보이는 상태입니다.
- 메모리 한계로 인하여 다시 Launched 될 수도 있으며, back 버튼을 통해 Resumed 시킬 수 있습니다.
■ Stopped : 한 액티비티가 다른 액티비티에 의해 완전히 가려진 상태입니다.
- 메모리 한계로 인하여 다시 Launched 될 수도 있으며, 사용자에 의해 앱이 재시작 될 수도 있습니다.
■ Destroyed : 사용자의 요청에 의해 액티비티가 종료될때의 상태입니다.
이제 다시 본론으로 들어가서, 액티비티는 고유의 상태와 함께 시스템 콜백 메소드를 호출하는데 콜백 메소드내부에서 동작을 지정해주므로써 액티비티 상태에 알맞는 행동을 지정할 수 있습니다.
(콜백 메소드 : 프로그램 자신이 아닌 다른 프로그램에 의해 호출되는 함수)
■ onCreate() : 액티비티가 최초 실행될 때
■ onStart() : onCreate() 이후 바로 호출(onCreate()가 호출하는것은 아님)
■ onResume() : Stooped상태 또는 Paused 상태에서 액티비티가 다시 실행 될 때
■ onRestart(): 액티비티가 다시 실행될 때
■ onPause() : 액티비티가 Pause 될 때
■ onStop() : 액티비티가 Stop 될 때
■ onDestroy() : 액티비티가 종료될 때
액티비티의 상태에 따라 콜백메소드를 이용하므로써 어떤액티비티가 어느시점에 지정된 역할을 수항하게 할수있습니다. 이제 간단한 예제코드를 보면서 최초 안드로이드 프로젝트생성시 생성되는 기본적인 코드가 어떻게 동작되는지 이해될것입니다.
(이 코드는 제가 독자들의 이해를 돕기 위해서 모든 콜백메소드를 표현한것이며, 실제로 모든 콜백메소드를 써가면서 액티비티를 구현 할 필요는 없습니다.)
onCreate() 함수를 누가 호출하지 않아도 콜백메소드로 지정되어있기때문에 액티비의 상태에따라 해당 함수가 호출되게 됩니다. 즉, 앱을 최초로 실행할경우 액티비티가 올라오게되면 Launched 되므로 onCreate()와 onStart() , onResume()가 호출됩니다.
실제로 그렇게 되는지 실행결과를 보시기바랍니다.
약간의 이해를 돕기위해 홈화면으로 나갓다가 다시 앱을 실행한 경우입니다. (back 버튼을 누르지 않음) 이미 앱이 메모리에 올라온 상태에서 홈버튼을 눌렀기때문에 onStop() 메소드가 호출되었으며 다시 앱을 실행시키자 onRestart와 onStart 그리고 onResume이 실행되었습니다. 왜 onCreate가 실행되지 않느냐는 생각도 들탠데 이유는 액티비티가 이미 메모리스택에 쌓여있는 상태이기때문에 다시 Create 할 필요가 없으며 위 생명주기에서도 그렇게 유도하고있기때문입니다.
액티비티의 상태에따라 콜백메소드의 선택은 개발자의 몫이므로 신중한 선택을 해야합니다.
'Lecture > Android' 카테고리의 다른 글
안드로이드 웹 캐시 삭제 (0) | 2012.07.07 |
---|---|
구글맵 api 와 keytool (0) | 2012.07.04 |
view와 interface (0) | 2012.06.02 |
3. 레이아웃과 컴포넌트 (0) | 2012.05.21 |
1. 안드로이드 프로젝트 구성 (1) | 2012.05.04 |