[Android] 액티비티의 생명주기(Life cycle)
모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다.
액티비티의 생명주기(Life Cycle)
액티비티는 처음 실행될 때 메모리에 만들어지는 과정부터 시작해서 실행, 중지, 메모리에서 해제되는 여러 과정의 상태 정보를 갖고 있음. 이런 상태 정보는 시스템이 관리하면서 각각의 상태에 해당하는 메서드를 자동으로 호출함.
액티비티의 상태 정보
- 실행(Running)
- 화면상에 액티비티가 보이면서 실행되어 있는 상태
- 액티비티 스택의 최상위에 있으며 포커스를 가지고 있음
- 일시 정지(Pause)
- 사용자에게 보이지만 다른 액티비티가 위에 있어 포커스를 받지 못하는 상태
- 대화 상자가 위에 있어 일부가 가려진 경우에 해당
- 중지(Stopped)
- 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태
액티비티의 상태 메서드
시스템에서 액티비티의 생성부터 실행까지 자동으로 호출하는 메서드 → 콜백 메서드(Callback Method)
상태 메서드 | 설 명 |
onCreate() |
|
onStart() |
|
onResume() |
|
onRestart() |
|
onPause() |
|
onStop() |
|
onDestory() |
|
☝ 실제 앱을 구성할 때는 중간에 전화가 오거나 갑자기 핸드폰이 종료된 이후에도 게임 진행중이던 상태로 다시 돌아가야 함
💡 이련 경우, onPause()와 onResume() 메서드를 사용해야 함. 앱이 멈추거나 없어질 때, 앱이 다시 보이거나 새로 실행될 때 호출되어 이 2가지 메서드를 구현하여 앱의 상태를 저장하거나 복원해야 함!
→ onPause()에서 데이터를 저장하고, onResume() 안에서 데이터 복원
💡 액티비티를 중지시키기 전에 호출되는 onSaveInstanceState() 메서드를 이용해 데이터를 임시 저장할 수 있음.
→ onSaveInstanceState() 메서드의 파라미터로 전달되는 번들 객체를 이용해 데이터를 저장하면 onCreate()나 onRestoreInstanceState() 메서드로 저장했던 데이터가 전달됨
[예제]
onStart, onStop, onResume, onPause, onDestroy 메서드를 불러와 로그와 Toast 메세지를 입력!
마우스 우클릭 → [Generate → Override Methods...] 에서 Ctrl 누른 채로 원하는 메소드들 선택
onCreate → onStart → onResume → onPause → onStop → onDestroy
- 화면이 보일 때 : onCreate → onStart → onResume
- 시스템 [Back] 버튼을 눌렀을 때 (화면전환) : onPause → onStop
- 화면 전환 시에는 onDestory() 메서드가 호출되지 않음 → 새롭게 올라오는 화면 뒤에 숨어 있는 것과 같은 상태
- 실제로는 액티비티 스택으로 들어가는 것임
- 위에 있던 액티비티가 사라지면 다시 onResume()이 호출되면서 화면에 보임
- 시스템 [Back] 버튼을 눌렀을 때 (강제종료) : onPause → onStop → onDestroy