본문 바로가기

Android

[Android] Activity 생명주기

728x90

액티비티는 어플리케이션 컴포넌트로, 쉽게 말해 어플리케이션에 보이는 각 화면이 액티비티이며 액티비티에는 UI가 들어가게 됩니다.

 

액티비티는 후입 선출인 스택에 쌓이는 구조로 사용자에게 표시되고, 스택에 쌓이는 액티비티가 가지는 생명주기에 따라 상태가 변합니다.

 

Activity lifecycle

 

전체 수명

onCreate() ~ onDestroy() 사이를 의미하며, onCreate()에서 상태 설정을 수행하고, onDestroy()에서 리소르를 해제해주어야 합니다.

 

가시적 수명(Visible)

onStart() ~ onStop() 사이를 의미하며, 사용자가 액티비티를 보며 상호작용을 할 수 있습니다. onStop()이 호출될 경우에는 새 액티비티가 시작되므로, 이전에 있던 액티비티는 표시되지 않습니다.

 

전경 수명(Foreground)

onResume() ~ onPause() 사이를 의미하며, 액티비티는 포그라운드 상태에서 표시되고, 숨겨짐을 반복하는 경우가 있어, 해당 작업은 무거워선 안되므로 가볍게 작성되어야 합니다.

 

1. onCreate()

액티비티가 최초로 생성될 시 호출되며, 객체 생성, 초기화 등을 합니다. 

 

2. onStart()

액티비티가 사용자에게 표시되기 직전에 호출되며, 이 상태를 빠르게 지나 onResume()이 실행됩니다.

이 상태에서 BroadcastReceiver를 등록하는 것이 좋습니다.

 

3. onResume(), onPause()

액티비티가 사용자에게 표시될 때 onResume() 상태가 되며, 전화 등으로 액티비티가 가려지는 포커스를 잃은 상태일 때, onPause() 상태가 됩니다. 

 

이 상태들이 반복되는 경우가 많기에 아래처럼 작업하는게 좋다고 합니다.

onResume() : 리소스를 초기화하는 것이 좋습니다.

onPause() : 데이터 저장, 스레드 처리, 리소스를 해제하는 것이 좋습니다.

 

4. onStop()

사용자에게 다른 액티비티가 보이게되면 호출됩니다. 즉, 액티비티가 완전히 보이지 않는 상태입니다.

 

5. onDestroy()

액티비티가 종료되기 전에 호출되는 마지막 상태입니다. 사용자가 액티비티를 finish()한 경우 또는 시스템 공간 절약을 위해 인스턴스를 소멸시킨 경우 호출됩니다.