티스토리 뷰
1. 액티비티 생명주기에 대한 개념
안드로이드는 모바일 기기에서 구동이 되기 때문에 PC에서 구동되는 프로그램에 비해 더 효육적인 메모리 관리를
해야 합니다. 안드로이드 어플리케이션을 구성하는 4대 구성요소 중 하나인 액티비티(Activity) 역시 효육적인 메모리 관리를 위해 액티비티가 생성되고 소면되는 조건인 생명주기를 가지고 있습니다.
액티비티의 상태는 크게
- 활성(Active)
- 일시정지(Paused)
- 정지(Stopped)
3가지로 분류를 할 수 있으며, 각 상태에 해당하는 생명주기들이 존재합니다.
① 활성
현재 화면에 액티비티가 표시되는 상태. 유저와 상호작용(버튼 클릭,텍스트 입력 등등...)을 할 수 있는 상태를 뜻합니다.
즉, 일반적인 UI가 보이는 상태 자체를 액티비티가 활성 상태라고 할 수 있습니다.
② 일시정지
화면에서는 액티비티가 보이지만, 유저와 상호작용은 할 수 없는 상태입니다. 배경이 투명한 액티비티나 화면 전체를
가리지 않는 다른 액티비티에 의해 액티비티의 일부가 가려진 경우가 해당됩니다. 다이얼로그 또한 액티비티의 일부를
가리지만, 다이얼로그는 액티비티의 일부이기 때문에 이 경우에는 일시정지 상태로 바뀌지 않습니다.
③ 정지
다른 액티비티에 의해 완전히 가려진 상태입니다. 액티비티 A가 액티비티 B를 호출해서 액티비티 B가 화면에 보이면,
액티비티 A의 모습은 화면에서 더이상 보이지 않게 되고, 이러한 경우를 정지 상태라고 합니다.
액티비티의 상태는 3가지로 나뉘지만, 안을 살펴보면 7개의 상태로 나눠지게 됩니다.
아래 메소드들이 호출됨에 따라 액티비티의 상태들이 바뀌게 되며, 액티비티를 구현할 때 해당 메소드를 오버라이딩 한 후
각 상태에 따라 처리해줄 작업을 지정을 해주시면 됩니다.
메소드의 이름만 봐도 대충 어떨 때 호출하여 사용할 지 느낌이 오지 않습니까?
위 그림을 보고 액티비티의 상태가 어떻게 변하고 어떤 메소드가 호출되면 액티비티의 상태가 변하게 되는지 알아봅시다.!!
1) 액티비티 상태에 따른 생명 주기.
onCreate()
객체를 사용하기 위해서는 객체의 생성자를 이용하여 새로운 인스턴스를 만들어줘야 하듯이,
액티비티를 처음 시작하려면 액티비티를 만들어주어야 합니다
액티비티의 생성은 onCreate(Bundle savedInstanceState) 메소드의 호출을 통해 이루어집니다.
이 onCreate()메소드는 액티비티의 초기화를 담당하는 코드들을 처리해줍니다. 액티비티에서는 기본적으로 각종 버튼이나 리스트, 체크박스 , EditText와 같은 위젯들이 배치되어 있는 레이아웃을 구성하므로 그러한 위젯들이 유저와 상호작용을 할 수 있도록 해주는 코드들을 포함하고 있어야 합니다. 예를 들면 버튼을 클릭했을 때 발생하는 이벤트와 같은거요
onStart() / onResume()
이렇게 onCreate() 메소드를 통해 초기화를 완료했다면 액티비티를 시작하기 위한 준비를 모두 끝낸 것입니다.
이제 액티비티 시작을 해야 하는데 이 때 사용되는 메소드가 바로 onStart()메소드입니다. 하지만, 이 상태는 완전히 액티비티가 시작된 상태가 아니라 액티비티가 화면에 표시되기 직전의 상태입니다. 이어서 onResume()메소드가 호출되면 액티비티가 화면에 표시됩니다. 액티비티가 생성한 뒤 바로 액티비티를 실행하면 간단한데, 왜 굳이 onStart()와 onResume()으로 나눠졌을까요?
onStart()는 액티비티가 실행되다가 다른 액티비티가 화면에 표시되어 정지 상태가 되어 onStop()메소드가 호출되었다가, 다시 정지되었던 액티비티가 호출되어 onRestart()를 거쳐서 돌아오거나, 또는 어플이 종료되었다가 다시 액티비티를 생성하고(onCreate() 호출) 액티비티를 화면에 표시할 때 onStart()를 호출하게 됩니다.
즉, onStart() 메소드는 액티비티가 화면에서 보이지 않다가 다시 나타날 때 불리는 메소드이며
정지 상태에서 액티비티가 복귀될 때 호출된다고 할 수 있습니다.
반면, onResume()은 액티비티가 일시정지 상태에서 복귀될 때 호출됩니다.
이는 액티비티가 유저와 상호작용을 하지 못하다가 다시 상호작용을 할 수 있게 되는 것을 뜻합니다.
onStop()
액티비티가 화면에 표시되고, 사용자와 상호작용을 할 수 있는 활성(Active)상태에서 다른 액티비티에 의해 화면이 가려지거나, 화면이 사라지게 되면 그 액티비티는 정지(Stopped)상태가 됩니다. onStop()메소드가 호출되면 해당 액티비티는 정지 상태가 됩니다.
일반적으로 정지된 액티비티는 유저가 다시 사용할 것을 대비하여 메모리에서 남아 있다가 메모리가 부족하게 되면 메모리 확보를 위해 강제로 종료되게 됩니다. 그 후 사용자가 다시 그 액티비티를 실행시키게 되면 다시 액티비티를 onCreate() 로 생성을 한뒤 실행이 됩니다.
반면에, 메모리 부족 현상이 발생하지 않아 액티비티가 대기상태로 메모리에 남아있을 때, 다시 그 액티비티를 호출하게 되면 액티비티를 다시 만들 필요 없이 onRestart()를 통해 화면에 표시하면 되므로 시간이 절약되며 빠르게 표시가 가능합니다.
'program' 카테고리의 다른 글
이클립스 set get 메서드 자동 생성 (0) | 2014.07.17 |
---|---|
웹서비스의 구현 기술 Soap과 Rest 방식의 비교 자료 스크랩 (0) | 2014.07.07 |
안드로이드 os버젼과 api레벨 (0) | 2014.07.07 |
아두이노 입문 괜찮은글 (0) | 2014.06.22 |
JAVA 간략 정리 (0) | 2014.02.14 |