본문 바로가기
Android

안드로이드의 시작 상태 - app startup time (Cold, Warm, Hot)

by 서퍼리노 2023. 2. 7.
728x90

 

안드로이드 애플리케이션은 사용자에게 빠르고 편리한 시스템을 제공합니다.

하지만 안드로이드 앱에서 너무 많은 시간을 대기하거나 멈춰있는 경우

사용자가 앱을 사용을 이탈하거나 앱을 삭제할 수도 있습니다.

 

 

따라서 안드로이드 앱을 개발할 때에는 단순히 실행되는 앱이 아닌 

빠르고 편리한 앱을 만들 수 있도록 목적을 주어야 합니다.

 

 

안드로이드 앱 실행 시간

 

안드로이드 앱은 상태에 따라 각각 다른 속도로 실행됩니다.

이러한 각각의 상태를 안드로이드 시작 상태라고 합니다.

 

앱은 콜드 스타트, 웜 스타트, 핫 스타트라는 세 가지 상태 중 하나에서 시작하며,
각 상태를 앱이 사용자에게 실행되는 데에 걸리는 시간에 영향을 미칩니다.

 

상태를 간단하게 비교하자면

콜드 스타트는 앱이 처음부터 시작됩니다.

다른 상태(웜 스타트, 핫 스타트)는 시스템이 실행 중인 앱을 백그라운드에서 포그라운드로 가져옵니다.

 

온전히 처음부터 시작을 콜 스타트,

중단되었던 프로그래스를 다시 실행하는 것이 웜 스타트와 핫 스타트입니다.

 

그렇다면 모든 상태를 더욱 빠르게 실행시키기 위해선 어떻게 해야 할까요?

앱이 빠르게 시작하도록 최적화하려면 안드로이드 공식 문서에서는
항상 콜드 스타트를 가정해서 최적화하는 것을 추천하고 있습니다.

 

하지만 가장 좋은 방법은 각 상태에서 하는 일과 상호작용하는 방식을 이해하는 것이 좋습니다.

하나씩 어떠한 일을 하는지 알아봅시다.

 

콜드 스타트(Cold Start)란?

콜드 스타트는 위에서 설명한 것처럼 앱이 처음부터 시작되는 상태를 말합니다.

해당 상태는 기기가 처음 부팅되거나, 시스템에서 앱이 완전히 종료된 후에
처음으로 시작되는 경우 등에서 발생합니다.

 

즉, 현재 실행하려는 앱이 안드로이드 디바이스 내에 프로세스로 존재하지 않을 때 일어납니다.

 

이 유형에서는 온전히 처음부터 실행해야 하기 때문에 다른 시작 상태보다 더 많은 작업들을 실행하여

시작 시간을 최소화하는 데 가장 어려움이 있습니다.

 

콜드 스타드에서 하는 작업

공식 문서에 의하면 콜드 스타트를 시작하면 3가지의 과정이 일어난다고 합니다.

  • 앱 로드 및 시작
  • 시작 직후 앱의 빈 시작 창 표시
  • 프로세스 만들기

시스템에서 앱 프로세스를 만든 이후 앱 프로세스에서는 아래 단계를 실행합니다.

  • 앱 객체 만들기
  • 기본 스레드 시작
  • 기본 활동 만들기
  • 뷰 확장
  • 화면 배치
  • 처음 그리기 실행

이후에 앱 프로세스에서 처음 그리기 실행까지 마치면 
사용자는 앱을 사용할 수 있습니다.

 

이후에도 많은 애플리케이션 만들기, 활동 만들기 등의 자세한 내용들이 있지만,
이 글에서는 각 스타트에 대한 개념을 이야기하기 때문에 넘어가겠습니다.

 

웜 스타트(Warm Start)란?

웜 스타트는 콜드 스타트 시 발생하는 작업의 일부 하위 집합을 포함하며
동시에 핫 스타트보다 더 많은 오버헤드를 나타냅니다.

 

즉 cold start > warm start라고 할 수 있습니다.

 

오버헤드란?
특정한 기능을 수행하기 위해 추가로 사용되는 컴퓨터의 자원을 의미합니다.

 

웜 스타트로 간주되는 상황은 여러 가지가 있지만
대표적인 예를 들자면

  • 사용자가 앱을 종료한 다음 다시 시작합니다. 
  • 시스템이 메모리에서 앱을 제거한 다음 사용자가 앱을 다시 시작합니다.

즉 사용자가 앱을 종료하고 재시작하여 앱이 onCreate()부터

액티비티를 다시 만들어야 하는 경우를 이야기할 수 있습니다.

 

cold start와의 차이점으로는

현재 애플리케이션의 프로세스가

메모리 상에 남아 있는지가 큰 차이점이라고 할 수 있습니다.

 

핫 스타트(hot start)란?

핫 스타트는 콜드 스타트보다 훨씬 간단하고 오버헤드가 낮습니다.

핫 스타트에서는 그저 활동을 포그라운드로 가져오기만 하면 됩니다.

 

애플리케이션의 모든 활동이 아직 메모리에 있으면 

객체 초기화나 레이아웃 확장, 렌더링과 같은 작업을 반복하지 않아도 됩니다.

 

각 시작 상태와 각 프로세스를 보여주는 그림입니다.

 

문제 감지 및 진단

Android에서는 여러 가지 방법으로 앱 문제를 알리고 문제 진단을 도와줍니다.

Android vitals를 통해 문제 발생에 관한 알림도 받을 수 있고,

진단 도구를 사용하여 문제를 진단할 수 도 있습니다.

 

Android vitals

Android vitals를 사용하면 앱 시작 시간이 너무 긴 경우

Play Console을 통해 알림을 받을 수 있습니다.

이를 통해 앱 성능을 개선할 수 있습니다.

Android vitals에서 앱 시작 시간이 너무 긴 것으로 간주하는 기준입니다.

  • 콜드 스타트가 5초 이상 걸림
  • 웜 스타트가 2초 이상 걸림
  • 핫 스타트가 1.5초 이상 걸림

Android vitals 데이터를 수집하는 방법과

자세한 내용은 Play Console 문서를 참고할 수 있습니다.

 

728x90