본문 바로가기

Android

Android Activity - Lifecycle(생명주기)

주의

이 블로그는 개인적인 생각과 이해를 정리한 곳입니다. 실제와 다를 수 있으니 글에서 참고한 글을 꼭 확인해주세요.

Activity란?

안드로이드 컴포넌트중 하나로써 UI, 즉 화면을 관리하는 대표적인 클래스입니다. 안드로이드 애플리케이션 내에서 생명주기를 따르도록 설계되어있습니다. 간단하게 화면(페이지)은 Activity 하나로 이루어져 있다고 볼 수 있습니다.

 

Activity는 화면을 관리하는 클래스이기 때문에 화면과 관련된 기능들을 제공합니다. 화면에 View를 그려준다던지, 터치 이벤트를 받아서 처리한다던지, 단말 회전 등을 할 수 있습니다.

 

 class MainActivity: AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
     }
 }

Activity 생명주기

Activity는 시작하고 종료될 때 까지 정해진 생명주기가 존재합니다. 생명주기는 onCreateonStartonResumeonPauseonStoponDestroy가 있습니다. 각각의 생명주기는 시스템이 상황에 맞게 호출을 해줍니다. 개발자가 직접 호출하는 것이 아니라 시스템이 호출해주기 때문에 그에 맞는 동작을 해주는 것이 바람직합니다. 예를 들면 onDestory에서는 Activity가 소멸되기 전에 호출되므로 화면을 갱신해주는 동작이 들어가서는 안됩니다.

 

아래는 Activity 생명주기 그래프입니다.

 

- Activity Lifecycle -

아래는 Activity 원형 코틀린 코드입니다

 class Activity: ApplicationContext() {
 
     protected fun onCreate(savedInstanceState: Bundle?) {}

     protected fun onStart() {}

     protected fun onRestart() {}

     protected fun onResume() {}

     protected fun onPause() {}

     protected fun onStop() {}

     protected fun onDestroy() {}
 }

onCreate

onCreate는 Activity가 생성된 후 호출됩니다. Activity가 메모리에 올라간후 제일 먼저, 최초에 한 번만 호출되는 생명주기입니다. 화면(View, Layout) 구성을 하고 필요한 클래스들을 초기화 및 설정하는 동작을 요구합니다.

 

 class MainActivity: AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
     }
 }

onStart

onStart는 Activity가 화면에 노출되기 전에 호출되는 생명주기입니다. onCreate이후 화면에 노출되는 시점이나, Activity가 화면에서 사라진 후(onStop) 다시 노출될 때 호출됩니다. Foreground 상태로 간주할 수 있으며 화면에 노출될 때 필요한 동작들을 요구합니다. 예를 들면 화면에서 사라져서(onStop) 동영상을 일시정지시켰지만 다시 재생시켜야 하는 코드가 될 수 있습니다.

 

 class MainActivity: AppCompatActivity() {
     
     override fun onStart() {
         super.onStart()
         mediaPlayer?.start()
     }
     
     override fun onStop() {
         super.onStop()
         mediaPlayer?.pause()
     }
 }

onResume

onResume은 사용자로부터 입력을 받을 수 있는 상태, 포커스된 상태일 때 호출되는 생명주기입니다. onStart, onPause가 호출된 이후 가장 최상단 Activity로 자리를 잡았을 때 호출됩니다.

onPause

onPause는 Activity가 포커스를 잃었을 때나 Activity가 사라지려는 onStop이 호출되기 전에 호출되는 생명주기입니다.

onStop

onStop은 Activity가 화면에서 보이지 않게 되었을 때 호출되는 생명주기입니다. 다른 Activity가 위에 올라와서 가려지거나 Activity가 종료(finish) 요청을 받고 onDestroy 되기 전에 호출됩니다. Background 상태로 간주할 수 있으며 Activity가 화면에 가려졌을 때 필요한 동작들을 요구합니다. 예를 들면 화면에 가려지면 볼 수 없는 동영상을 일시 정지해야 하는 코드가 될 수 있습니다.

onDestroy

onDestroy는 Activity가 더 이상 필요 없게된 경우 호출되는 생명주기입니다. Activity를 종료(finish)시키거나 시스템에서 메모리 공간을 추가로 확보하기 위해서 화면에 보이지 않는 Activity를 제거시키는 경우 호출됩니다. Window, View 등 화면과 관련된 객체들을 모두 해제시키기 때문에, 수행하고 있는 UI와 관련된 동작을 모두 취소 또는 해제시켜주어야 합니다.

 

 class MainActivity: AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         loadUserData()
     }
 
     override fun onDestroy() {
         super.onDestroy()
         cancelLoadUserData()
     }
 }

참고

'Android' 카테고리의 다른 글

안드로이드 Compose: 선언적 UI 개발의 미래  (0) 2023.09.16
Android Jetpack ViewModel  (0) 2020.09.22
Android LiveData  (0) 2020.09.09
Android Dagger Hilt  (0) 2020.09.08