PC환경이나, 메모리 등의 자원이 상대적으로 넉넉한(?) 운영체제 하에서라면 여러개의 어플리케이션들이 돌아가도 크게 신경쓸일이 드물지만, 모바일 앱은 제한된 자원 하에 운영되어야 하기 때문에 앱 상의 액티비티들이 항상 활성화 상태일수는 없고, 필요에 따라 정지되거나, 보여지지 않아야 한다...
안드로이드의 액티비티는 크게 다음 3가지 상태중에 있게 됩니다.
1) Active 상태 (활성화)
- 액티비티가 스크린 전면에서 실행되고 있는 상태
- 사용자의 입력을 받을수 있는 상태
2) Pause 상태 (일시멈춤)
- 사용자의 입력은 못 받으나 스크린에는 보여지는 상태
- Pause 상태일때도 상태정보와 리소스는 운영되고 있지만, 이 또한 여의치 않으면 강제 종료 되기도 함
3) Stop 상태 (정지)
- 아예 스크린에 보여지지 않는 상태 (다른 액티비티에 가려짐)
- 여전이 상태정보와 리소느는 유지되지만, 여의치 않으면 강제 종료됨
이러한 일련의 액티비티의 상태의 순환 구조를 LifeCycle 이라 하는데, 기본적으로 구글에서 제공하는 라이프 사이클에 대한 도해는 다음과 같습니다.
액티비티마다 상태 전환시 호출되는 메소드들이 위 도해에서 onXXXX () 과 같이 7가지가 존재합니다.
1) onCreate()
: 액티비티 생성되어 최초 호출
: 리소스 초기화 등의 작업
: pause, stop 상태에서 다시 시작하는 경우 이전 정보로 복원 가능
2) onStart()
: 스크린에 보여질때 호출
3) onResume()
: 사용자의 입력을 받을수 있을때 호출되는 메소드
: 화면 맨 앞으로 나올때의 처리를 해주면 됨
4) onPause()
: 사용자의 입력을 받을수 없게 되었을때
: onRerume() 과 대응됨
5) onStop()
: 스크린에 보이지 않게 될때 호출되는 메소드
: onStart() 와 대응
6) onRestart()
: 액티비티가 스크린에 보이지 않다가 다시 스크린에 보여줘야 할때 호출되는 메소드
: onStart() 호출 직전 필요한 작업 수행
7) onDestroy()
: 액티비티 종료 전에 호출
: 강제로 종료될때도 호출됨.
간단하게 액티비티의 상태 전환을 체크해보려면 아래와 같이 Log 메소드를 사용하여 확인 가능합니다