본문 바로가기
프로그래밍/Android, iOS

[Android] Splash Screen API 분석

by YuminK 2023. 10. 22.

안드로이드 12(API 31, 32)부터 Splash Screen API가 추가되었다. 기존에 Splash Screen을 커스텀해서 사용하던 방식을 개선하고자 공식적으로 지원하는 API이다. 앱의 실행 상황(Cold start)에 맞게 적절한 리소스를 사용하기 위해 API를 제공한다.

앱이 처음 시작되는 경우 Cold start에 해당한다. 앱을 실행시키기 위한 프로세스단 처리부터 시작된다.

Warm Start의 경우 액티비티의 onCreate부터 호출이 된다.

Hot Start의 경우, 액티비티가 메모리에 존재하여 초기화를 하지 않는다.

메모리가 달라진 경우에 한정되어 다시 만드는 처리를 진행한다. 

 

안드로이드 12부터 스플래시 스크린 API를 공식적으로 제공하여 애니메이션을 주거나,

Splash Screen 화면 전환 애니메이션을 주는 것이 가능하다.

 

배경 색을 지정하거나 아이콘에 대한 애니메이션, 애니메이션의 속도,

아이콘 백그라운드 컬러, 하단 브랜딩 이미지, 화면 전환 애니메이션을 제어할 수 있다.

 

직접 수정하면서 확인을 해보면, 원하는 UI를 마음껏 조정할 수 있는 형태가 아니다.

배경을 수정하고 아이콘 부분만 수정할 수 있도록 되어 있다.

 

솔직히 이 부분에서 구글에게 실망했다. 굳이 Splash Screen의 형태를 고정했어야 했을까.

iOS에서 LaunchScreen에 대한 UI를 자유롭게 설정할 수 있는 것과 대비된다. 

 

마이그래이션 관련 문서를 보더라도 결국 자유롭게 커스텀을 하지 못 하도록 되어 있다.

 

마이그레이션 제안 방법을 보면, 

1. 커스텀 액티비티가 보여지지 않도록 처리한다. => ?? UI가 아니라 기능으로만 쓰라는 소리다. 

2. 이전 액티비티를 유지 => 시스템 스플래시 스크린에서 커스텀 액티비티로 이동

(안드로이드에서 제공하는 Splash  Screen을 출력해야 하는 방식) 

3. 이전 커스텀 액티비티를 삭제하고 완전히 교체

 

Splash Screen API는 제공하는데 UI를 자유롭게 제어할 수는 없다.

기존에 있었던 Splash Activity와 연동하더라도 별개로 시스템 Splash Screen이 출력된다. 

 

내가 생각했던 이상적 모습: Splash Screen API를 활용하여 원하는 대로 UI를 변경할 수 있음. 굿굿

현실: 안드로이드에서 제공하는 Splash Screen을 피해갈 수 없고, 입맛대로 커스텀도 안 된다. (왜 추가 된겨..?)

 

이게 정말 안드로이드 개발자들이 원했던 기능인지에 대한 의문이 든다. 

제공할 거면 UI변경에 자유를 줬어야지. 뭔가.. 만들어 줬는데 자유도가 매우 떨어짐.

 

예를 들어 화면 전체에 애니메이션을 주고 싶다고 해보자.

그러면 시스템 Splash Screen을 띄우고 이후에 따로 액티비티를 띄워서 처리해야 하는 것이다. 

 

편법으로 시스템 Splash Screen에 투명을 주고 우리가 따로 만든 액티비티부터 시작하도록 하는 방식이 가능하다. 

근데 뭐랄까 깔끔한 해결 방법이라 보기에는 무리가 있어보인다. (클릭을 했을 때 앱 실행이 느리게 느껴질테니)

 

당연히 자유로운 커스텀이 가능할 것이라 생각하고 관련 문서를 찾아보았는데,

솔직히 해당 기능에 대해서는 꽤 실망한 것이 사실이다.

결론적으로는 시스템 Splash Screen이 추가되는 것을 하나의 흐름으로 받아들이는 것이 좋아보인다. 

 

참고자료

Cold/Warm/Hot Start

https://developer.android.com/topic/performance/vitals/launch-time#cold

 

Splash Screen

https://developer.android.com/develop/ui/views/launch/splash-screen

 

Splash Screen Migration

https://developer.android.com/develop/ui/views/launch/splash-screen/migrate

 

API별 비교 자료가 잘 되어 있다.

https://jdroid.tistory.com/19

댓글