Android

[Android] Activity LifeCycle(액티비티 생명주기)

JunsuKim 2022. 8. 14.
728x90

Activity LifeCycle

Activity는 안드로이드 컴포넌트 중의 하나로, 애플리케이션의 가장 기본이 되는 구성 요소이다.

일반적으로 하나의 애플리케이션에는 여러 개의 액티비티가 사용된다.

예를 하나 들어보자.

현재 유튜브에서 영상을 보고 있는데, 전화가 와서 받았다고 하자. 이때 유튜브 영상은 일시 정지된 상태로 기다렸다가 통화가 마친 후 다시 전화 창에서 유튜브로 액티비티 전환이 일어나면 다시 시작할 수 있도록 해준다.

즉, 액티비티의 CallBack은 상태 변화에 적합한 특정 작업을 실행할 수 있게 해줌으로써, 상황에 맞는 적절환 전환을 처리하면 앱을 더 안정적으로 사용할 수 있다.

위의 과정을 차례대로 봐보자.

위에서도 예시로 들었던 유튜브, 전화로 또 한번 상황을 만들어보겠다.

  1. 사용자가 유튜브 어플을 연다. 이 때 최초로 앱을 실행하는 것이므로 onCreate() 함수가 실행된다.
  2. 다음으로 onStart()가 호출되는데, 이 때부터 사용자가 액티비티를 볼 수 있다. 즉, 유튜브 화면이 보이기 시작하는 것이다.
  3.  이제 유튜브가 포그라운드에 위치하게 되면서, 사용자와 상호작용이 가능하게 된다. 이때 onResume()이 호출된다.
    즉, onResume()은 액티비티가 실행 중인 상태로 보면 된다.
  4. 전화가 걸려왔다. 꼭 받아야하는 전화이므로 어쩔 수 없이 전화를 받음으로써 유튜브 화면이 전화 화면으로 넘어가지게 된다. 사용자와 상호작용이 불가능하게 되면서 onPause()가 호출되고, 유튜브 화면이 더는 보이지 않으므로 onStop()이 호출된다.
  5. 어떠한 이유로 인해 전화를 받는 도중 유튜브가 완전히 종료되면 onDestroy()가 호출된다.
  6. 전화가 끝난 후, 다시 유튜브 화면으로 돌아오게 되면서 onResum() 상태로 돌아간다. 혹은 처음부터 재시작되어 onRestart()가 호출된 후, onStart()가 호출되어 앱이 재실행된다.

위 예시에서 총 7개의 Callback 기능을 볼 수 있었다.

각각의 Callback에 대해 좀 더 알아보자.

onCreate()

안드로이드 스튜디오에서 새 프로젝트를 만들어보면 MainActivity의 초기 화면은 다음과 같다.

package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

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

이처럼 onCreate()는 자동으로 생성되어 있다. 즉, 없어서는 안되는 반드시 구현해야 하는 메서드란 의미이다.

액티비티가 생성될 때 가장 먼저 실행되는 메서드로, 생명주기동안 어플이 실행될 때 한 번만 호출된다.

액티비티가 최초로 실행될 때 수행해야 하는 작업을 여기서 한다.

onStart()

액티비티가 시작되는 상태에 호출된다.

onStart()가 호출되면서 사용자가 액티비티를 볼 수 있고, 앱과 사용자가 상호작용할 수 있도록 포그라운드로 액티비티를 보낸다. 화면에 진입할 때 실행되야하는 여기서 작업을 한다.

onResume()

onStart()가 호출되고, 액티비티가 시작되는 상태가 끝나면 액티비티가 재개되는 상태에 들어온다.

혹은 위에서 예시로 들었듯이 다른 화면으로 전환되었다가 원래 화면으로 돌아올 때, 호출된다.

액티비티가 재개되었을 때 실행되야하는 작업을 여기서 한다.

onPause()

어떠한 이벤트가 발생하여 사용자가 액티비티를 떠날 때 첫 번째 신호로 onPause()가 호출된다.

액티비티가 일시중지된 상태이거나, 포그라운드에 있지 않을 때 실행할 기능들을 여기에 구현한다.

onStop()

액티비티가 사용자에게 더 이상 보이지 않는 중단된 상태일 때 onStop()을 호출한다.

메모리가 부족할 경우 onStop()은 호출되지 않을 수도 있다.

onDestroy()

앱이 완전히 종료될 때 호출된다.

이 또한 onStop()처럼 메모리가 부족할 시 호출되지 않을 수 있다.

onDestroy()가 호출되는 특이한 경우도 있다.

바로 화면이 전환될 때이다. 화면이 세로에서 가로로 전환된다면, onDestroy()가 호출되고, 후에 onCreate()가 호출되어 다시 시작하게 되는 것이다.

onRestart()

액티비티가 일시정지되었다가 다시 시작되기 전에 호출된다.

즉, 다른 액티비티로 전환되었다가 원래의 액티비티로 전환될 때 호출된다.

구현

https://github.com/junsu1023/Android-Study/tree/activity-lifecycle

 

GitHub - junsu1023/Android-Study

Contribute to junsu1023/Android-Study development by creating an account on GitHub.

github.com

각각의 콜백들을 override 함수로 선언하여 Toast 메시지를 띄워보았다.

결과를 보자.

실행 결과

 

  • 앱이 처음 실행될 때
    • MainActivity onCreate() -> MainActivity onStart() -> MainActivity onResume()
  • 앱을 잠깐 나갔을 때
    • MainActivity onPause() -> MainActivity onStop()
  • 다시 원래의 액티비티로 돌아왔을 때
    • MainActivity onRestart() -> MainActivity Start() -> MainActivity Resume()
  • Change 버튼을 눌러 화면 전환했을 때
    • MainActivity onPause() -> SubActivity onCreate() -> SubActivity onStart() -> SubActivity onResume() -> MainActivity onStop()
  • 뒤로 가기 버튼으로 MainActivity로 전환
    • SubActivity onPause() -> MainActivity onRestart() -> MainActivity OnStart() -> MainActivity onResume() -> SubActivity onStop()
  • 어플을 나갔을 때
    • MainActivity onPause() -> MainActivity onStop()

 

728x90

댓글