와챠의 우당탕탕 코딩 일기장

Android 12 Splash + 앱 시작 시간 공부 본문

코딩 일기장/Android(Kotlin)

Android 12 Splash + 앱 시작 시간 공부

minWachya 2022. 1. 24. 16:14
반응형
  • 앱 시작 시간 공식 문서(링크)
  • 스플래시 공식 문서(링크)

Android12부터 SplashScreen API가 추가 되었다길래

이에 대해 자세히 공부해보려고 한다.

 

이 스플래시 화면 작동 방식은

콜드 스사트웜 스타트 시 앱이 준비가 될 때까지 스플래시 화면을 보여주는 것이다.

핫 스타트 중에는 스플래시가 작동하지 않는다.

(쉽게 말하면 앱이 준비할 게 좀 있을 땐 스플래시를 보여주고,

준비가 다 된 상태면 스플래시를 안 보여준다는 것이다.)

 

그렇다면 콜드, 웜, 핫 스타트란 무엇일까?

잠깐 알아가보자!!(공식 문서)

 

앱은 아래의 3가지 상태 중 하나에서 시작한다.

  • 콜드 스타트
  • 핫 스타트
  • 웜 스타트
콜드 스타트

앱이 처음부터 시작한다.

시스템과 앱이 다른 시작 상태보다 더 많은 작업 실행되므로

=> 시작 시간 최소화 어렵다.

 

여기서 잠깐

콜드 스타트 시작 시 시스템이 하는 일:

  1. 앱 로드 및 시작
  2. 시작 직후 앱의 빈 시작 창 표시
  3. 앱 프로세스 만들기

핫 스타트

시스템이 활동을 포그라운드로 가져오기만 하면 됨

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

=> 콜드 스타트보다 간단, 오버헤드 낮음.

콜드 스타트와 동일하게 시스템 프로세스가 앱에서 활동 렌더링을 완료할 때까지 빈 화면 표시


웜 스타트

콜드 스타트 작업 일부 포함 + 핫 스타트보다 더 많은 오버헤드


콜드 스타트만 앱이 처음부터 시작하고,

나머지 두 상태(웜, 핫 스타트)에서는 시스템이 실행 중인 앱을 백그라운드에서 포그라운드로 가져오는 것이다.

따라서 시간이 가장 많이 걸리는 콜드 스타트를 가정해 최적화를 진행한다.


트위터 앱이 생각났다.

트위터 앱을 처음 시작할 때는 스플래시를 1초정도 보여는 주는데,

앱을 종료한 뒤 바로 앱을 실행했을 때는 스플래시 화면이 엄청 짧거나, 아예 보이지 않았다.

트위터 하면서 이런 점이 참 편리하다고 이런 배경이 있었다니 신기하다^___^!!

 

그럼 이제 이 스플래시는 어떻게 만드는지 살펴보자


...gjf 겁나 쉽네

완성된 스플래시

Android 12부터 제공되는 Splash는 아래의 스플래시 모습을 지원해준다.

  • 1: 앱 아이콘
    • 벡터 드로어블이어야함. 정적/애니메이션
    • 기본: 런처 아이콘
  • 2: 아이콘 배경
  • 3: 마스크 처리
    • 적응형 아이콘과 마찬가지로 전경의 1/3이 마스크 처리됨
  • 4: 창 배경
    • 단일 불투명 색상으로 구성

themes.xml에서 아래 아이템들을 추가해주면 된다...... 짱 간단~

<!--전체 배경색-->
<item name="android:windowSplashScreenBackground">@color/yellow</item>
<!--가운데에 나오는 로고 아이콘 이미지-->
<item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
<!--스플래시 표시 기간:ms-->
<item name="android:windowSplashScreenAnimationDuration">1000</item>
<!--로고 아이콘 뒤의 원 색깔-->
<item name="android:windowSplashScreenIconBackgroundColor">@color/green</item>

그동안은 SplashActivity를 따로 만들고, ScheduledExecutorService를 사용해 스플래시 화면을 항상 1초만 보여주는 방식을 사용하고 있었는데,

이렇게 스플래시를 작성하는 쪽이 더 효율적이고 사용자도 불편해하지 않을 것 같다.

 

하지만...........

minSdk가 31 이상부터 사용 가능하기 때문에....

전에 포스팅했던 방법대로 사용해야 할 것 같다.내 폰은...... 30버전이라 안 돌아감ㅋㅋ

https://min-wachya.tistory.com/134

 

[안드로이드] 스플래시 만들기

1) drawbale에 splash.xml 추가 (아니면 아래처럼 theme.xml에 추가하는 방법으로 해도 됨) 나는 drawbale에 splash.xml 추가하는 방식으로 해보겠음 splash.xml 2) /values에 styles.xml 추가 styles.xml 3) Spla..

min-wachya.tistory.com


보다가

android:exported="true"

이게 무슨 뜻인지 궁금해서 찾아보니까 다른 앱에서 접근할 수 있으면 true 없으면 false로 설정하는 것이라고 한다.

기본 값은 false


참고

https://salix97.tistory.com/m/94

 

[Android] 안드로이드 - splash screen (splash activity)

1. splash 의 사전적 의미 splash 철벅 떨어지다, 끼얹다 https://dictionary.cambridge.org/ko/%EC%82%AC%EC%A0%84/%EC%98%81%EC%96%B4/splash 뭔가 첨벙하고 생겨났다! 그런 의미인것 같다 2. IT 사전에서 말하..

salix97.tistory.com

https://lanace.github.io/articles/right-way-on-splash/

 

Android Splash 화면을 구현하는 올바른 방법

시작하면서

lanace.github.io

https://codechacha.com/ko/android-12-splash-screens/

 

Android 12 - Splash Screens 알아보기

Splash Screen은 App이 처음 실행될 때, 로딩되는 화면을 가리기 위해 만드는 화면입니다. Android 12 이전에는 개발자가 직접 페이지를 만들었지만, Android 12(SDK 31)에서 동작하는 App은 기본적으로 Splash S

codechacha.com

 

반응형
Comments