본문 바로가기
Development

Android12 SplashScreen 대응 방법 (feat. 앱 실행상태)

by 파크인포 2024. 7. 30.

Flutter 앱을 만들면서 앱 아이콘을 적용하고 보니 iOS와 Android 에서의 스플래시 동작이 다른것이 보였다. Android 12 이상 디바이스에서 자동으로 SplashScreen이 표시되고 된 후 직접 만든 스플래시화면이 보였고 iOS 에서는 직접 만든 스플래시 화면이 바로 보이고 있었다. 그래서 SplashScreen 의 동작에 대해 궁금증이 생겨 정리해본다.

 

추가적으로 앱아이콘을 적용중에 Android 12 에서 나오는 SplashScreen 화면에서 나오는 앱 아이콘이 크게 나오는 이슈가 있어서 SplashScreen 에 표시되는 배경과 앱 아이콘에 대한 사이즈 가이드가 함께 정리해본다.

 

 

Android12 SplashScreen이 나온 이유 

Android12 부터 SplashScreen을 지원해준다. 그 이전에는 스플래시 화면을 직접 구성했었는데 이때의 문제점은 앱 실행상태와 상관없이 스플래시화면이 계속 보여주게 되는 문제점이 있었다.

 

예를 들어 앱과 앱의 프로세스가 아직 메모리에 남아있는 상태인 hot-start 상태일 경우에도 스플래시 화면이 표시되면서 리소스를 또 사용하게 됐었다. 또한 앱을 실행시 앱이 준비되기 전까지 흰색화면이 보인 후에 스플래시화면이 표시되는 부자연스러움이 있었다.

 

Splash와 앱 실행상태 관계 

Android12 부터 지원되는 SplashScreen 을 사용하면 앱 실행 상태에 따라 스플래시화면의 표시가 달라진다.

 

앱이 준비되기전까지 SplashScreen이 먼저 보여 흰색화면이 표시되지 않으며 앱이 준비 되면 SplashScreen이 닫히고 앱이 표시된다. 앱의 실행상태가 hot-start, warm-start일 경우에는 스플래시 화면이 표시되지 않아 불필요한 리소스 사용이 없다.

 

앱 실행상태 구분

  • cold-start : 앱 프로세스가 RAM에 존재하지 않은 상태에서 앱을 새롭게 실행되는 상태
  • warm-start : 앱은 종료됐지만 프로세스가 아직 RAM에 남아있는 상태에서 앱을 실행. 앱이 종료상태라 Activity가 생성되지 않았음
  • hot-start : 앱이 실행되어 있고 프로세스가 RAM에 존재하고 있는 상태에서 앱 실행. 앱의 활동이 모두 메모리에 있으므로 새롭게 리소스를 불러올 필요 없음

 

Android12 SplashScreen 적용 방법

Android 12 부터 SplashScreen 적용 되면서 흰화면에 아이콘 있는 형태의 스플래시가 사용되는데 SplashScreen 을 적용하는 방법은 3가지가 있다.

  • Android12 SplashScreen 사용하기
  • SplashScreen API 사용
  • SplashScreen compat 라이브러리 사용

Android 12 이상이라면 자동으로 SplashScreen이 표시되지만 Android 11 이하에서 SplashScreen을 적용하려면 SplashScreen API 를 사용해 인앱모션, 앱 아이콘을 보여주는 스플래시 화면, 앱으로의 전환 등 애니메이션으로 앱을 실행할 수 있다. SplashScreen Api 는 Android12 이전 버전에서도 SplashScreen를 사용할 수 있는 Api 이다. 

 

dependencies {
    implementation "androidx.core:core-splashscreen:1.0.0"
}

 

SplashScreen의 동작

앱 프로세스가 실행되고 있지 않은 cold-start 상태나, Activity가 생성되어 있지 않은 warm-start 상태의 앱을 실행하면 다음과 같은 이벤트가 발생한다. (hot-start 상태에서는 SplashScreen 표시안됨)

  • 시스템은 개발자가 정의한 테마 및 애니메이션을 사용해 SplashScreen을 표시
  • 앱이 준비되면 SplashScreen 닫히고 앱이 표시됨

 

SplashScreen의 요소와 메커니즘

SplashScreen의 화면 요소는 Android 매니페스트 파일의 XML 리소스 파일(theme)에 정의된다. 그 중에서 앱 아이콘, 아이콘 배경, 창 배경은 일부 커스텀이 가능하다.

  • 앱 아이콘 : vector drawable, 정적 또는 애니메이션, 런처 아이콘이 기본값. 애니매이션 적용시 권장 시간은 1초이다.
  • 아이콘 배경 : 선택사항. 아이콘과 창 배경 사이에 대비 필요한 경우 유용
  • 마스킹 영역 : 포그라운드의 1/3이 마스킹됨
  • 창 배경은(스플래시화면 배경)은 단일 불투명 색상으로 구성됨

SplashScreen 아이콘 크기

  • 앱 아이콘 전체 크기의 1/3이 마스킹되기 때문에(보이지 않음) 아이콘 이미지 크기에 따라 아이콘 영역 설정
    • 아이콘 배경이 있는 앱 아이콘 : 여백을 포함한 앱 아이콘 전체 크기는 240x240dp, 아이콘 영역은 160x160dp
    • 아이콘 배경이 없는 앱 아이콘 : 앱 아이콘 전체 크기는 288x288dp, 아이콘 영역은 192x192dp

 

참고

https://developer.android.com/develop/ui/views/launch/splash-screen?hl=ko