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
'Development' 카테고리의 다른 글
OAuth2.0 동작 흐름 알아보기 (0) | 2024.10.20 |
---|---|
OpenID Connect 와 Auth2.0 (0) | 2024.10.19 |
Flutter In iOS 14+, debug mode Flutter apps can only be launched from Flutter tooling 오류를 만난 이유 (1) | 2024.06.08 |
Xcode Device "000의 iPhone" isn't registered in your developer account (0) | 2024.05.11 |
Xcode iCloud의 Key-Value storage 여러앱에서 사용하기 (0) | 2024.05.11 |