개발/Android

액티비티 수명주기

Debin 2022. 4. 24.
반응형

액티비티 생명주기

  • 액티비티는 실행부터 종료까지 많은 상태 변화를 거치며, 상태가 변할 때마다 생명주기 함수가 자동으로 호출된다.
  • 액티비티의 상태는 활성 상태(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, , +,

 

반응형

댓글