반응형
액티비티 생명주기
- 액티비티는 실행부터 종료까지 많은 상태 변화를 거치며, 상태가 변할 때마다 생명주기 함수가 자동으로 호출된다.
- 액티비티의 상태는 활성 상태(Activity Running), 일시 중지 상태(Paused), 비활성 상태(Stopped)로 구분
- 액티비티의 생명주기는 액티비티의 생성부터 소멸까지의 주기를 말한다.
상태 | 설명 |
활성 상태(Running) (실행) | 화면 상에 액티비티가 보이면서 실행되어 있는 상태. 액티비티 스택의 최상위에 있으며 포커스를 가지고 있다. onCreate() -> onStrat() -> onResume() 함수가 호출 |
일시중지 상태(Paused) | 액티비티가 여전히 화면에 보이지만 포커스를 잃은 상태 현재 액티비티가 일시적으로 사용이 불가능한 상태 onPause() 함수가 호출되며, 곧 정지될 것임을 나타내기 위해 사용 |
비활성 상태(Stopped) (중지) | 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태 onPause() -> onStop() 함수가 호출 비활성 상태에서 "뒤로가기" 버튼 등을 누르면 활성 상태로 전환되며, 이때는 onRestart() -> onStart() -> onResume() 함수가 차례로 호출 |
App이 원하는 상황이 아니라 시스템이 강제로 지시하는 상황이 생길 수 있으므로
그때마다 App에 상황을 알려주어 필요한 일들을 처리할 수 있도록 하는데 이를 생명주기라고 한다.
Activity 클래스는 액티비티의 상태 변화(시스템이 액티비티를 생성, 중단 또는 다시 시작하거나, 종료하는 등)를 알아차릴 수 있는 여러 콜백들을 제공한다.
- onPause : 화면이 보이지 않도록 하면서 바로 호출
- onStop : 메서드 화면의 기능을 중지시키는 과정에서 호출
- onDestroy : 화면을 메모리에서 없애는 과정에서 호출
앱의 상태를 저장하거나 복원하는 메서드는 onPause(정지), onResume(시작 또는 재시작)이다.
수명주기에 따른 상태 변화는 아래와 같이 정리할 수 있다.
상태 메서드 | 설명 |
onCreate() | - 안드로이드 시스템이 액티비티를 최초로 생성할 때 호출 - 액티비티 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행 - 이전 상태가 저장되어 있는 경우에는 번들 객체를 참조하여 이전, 상태 복원 가능 |
onStart() | - 액티비티가 화면에 보이기 바로 전에 호출(동작할 수 있는 준비 단계) - 액티비티가 사용자에게 표시되고, 앱은 액티비티를 포그라운드에 보내 상호작용할 수 있도록 준비 - 액티비티가 화면 상에 보이면 이 메서드 다음에 onResume() 메서드가 호출된다. |
onResume() | - 액티비티가 사용자와 상호작용하기 바로 전에 호출됨(화면에 보여 주기 바로 전 단계) - (App의 상태 복원) - 액티비티가 포그라운드에 표시되고 사용자와 상호작용 - 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때가지 이 상태에 있음 |
onRestart() | - 액티비티가 중지된 이후에 호출되는 메소드로 다시 시작되기 바로 전에 호출됨 - 이 메소드 다음에는 onStart() 메소드가 호출됨 |
onPause() | - 또 다른 액티비티를 시작하려고 할 때 호출됨(액티비티가 화면에서 사라지는 단계) - 시스템은 사용자가 액티비티가 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출 - 저장되지 않은 데이터를 저장소에 저장하거나 실행 중인 작업을 중지하는 등의 기능을 수행하는 메서드 (App의 상태 저장) - 이 메서드가 리턴하기 전에는 다음 액티비티가 시작될 수 없으므로 이 작업은 매우 빨리 수행된 후 리턴 되어야 함 - 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 |
onStop() | - 액티비티가 사용자에게 더 이상 보이지 않을 때 호출됨 - 액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출됨 - 액티비티가 이 상태에 들어가면 시스템에 액티비티를 강제 종료할 수 있음 |
onDestroy() | - 액티비티가 소멸되어 없어지기 전에 호출됨 - 이 메소드는 액티비티가 받는 마지막 호출이 됨 - 액티비티가 애플리케이션에 의해 종료되거나(finish() 메서드 호출) 시스템이 강제로 종료시키는 경우에 호출될 수 있음 - 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 |
이상으로 포스팅을 마칩니다.
참고자료
2018, 정재곤, “Do it! 안드로이드앱프로그래밍(개정5판)
이지스퍼블리싱(주) 2019,안드로이드 withKotlin 앱프로그래밍가이드, Icox
2018, 강성윤, “깡샘의안드로이드프로그래밍“, 루비페이퍼
2014, 정재곤, 자바+안드로이드기술, 길벗
반응형
댓글