일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- RxKotlin
- paging
- liveData
- Kotlin
- google play
- 동영상
- Android 13
- 테스트 자동화
- SwiftUI Tutorial
- Observable
- MediaPlayer
- node
- databinding
- node.js
- Animation
- MediaSession
- android13
- rx
- mysql
- mvvm
- GCP
- MotionLayout
- list
- 인앱결제
- Reactive
- Android
- PagingLib
- SWIFTUI
- junit
- Koin
- Today
- Total
봄날은 갔다. 이제 그 정신으로 공부하자
Splash Screen이란? 본문
Splash Screen이란?
많은 Android앱들이 다양한 기능을 지원하고 또 점점 많은 라이브러리를 탑재하다보니 앱의 사이즈가 커져 사용자가 앱을 실행하기 위해 엡 아이콘을 눌러 실제 앱이 실행되는데까지 시간이 걸리는데 이때 사용자에게 첫화면이 보여지기 전까지 자연스럽게 노출되는 화면으로 Android 12에서는 모든 앱에 새로운 앱 실행 애니메이션을 사용하는 SplashScreen API를 지원합니다.
android는 앱 실행을 아래와 같이 3가지(Cold Start, Warm Start, Hot Start)로 구분 할 수 있으며, Splash Screen은 아래 3가지 앱 실행 상태 중 "Cold Start"와 "Warm Start"일때만 동작합니다.
- Cold Start: 앱이 처음부터 실행되는 것으로 제일 많은 시간이 소요됨.
- Warm Start: Cold Start보다는 빠르고 Hot Start 보다는 느림.
- Hot Start: 앱이 실행되어 메모리에 있는 상태로 포그라운드로 가져오기만 하면 되는 상태로 매우 빠름.
- 자세한 내용은 아래 링크 참고: https://developer.android.com/topic/performance/vitals/launch-time?hl=ko
Android 12 단말에서 앱을 실행해보면 개발자가 앱에 별도의 처리를 하지 않아도 자동으로 Splash Screen이 표시되는 것을 알 수 있는데 이렇게 자동으로 표시되는 것은 흰 배경 가운데에 앱 아이콘만 표시되는 기본 표현이므로 이걸 앱에 맞게 커스터마이징하고자 한다면 아래와 같은 처리가 필요합니다.
[Step 1] build.gradle에 Splash Screen 추가하기
Splash Screen을 추가하기 위해서는 compileSdk와 targetSdk가 31로 설정한 후 dependencides에 아래와 같이 splashscreen 라이브러리를 추가해 주어야 합니다.
단, splashscreen을 추가하기 위해서는 minSdk가 최소 21이상이어야 합니다.
android {
compileSdk 31
defaultConfig {
...
minSdk 21
targetSdk 31
...
}
...
dependencies {
...
implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
}
[Step 2] themes.xml에 splashscreen 테마 추가하기
아래와 같이 splashscreen의 테마를 추가해 줍니다.
<style name="Theme.MySplashScreen.Splash" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/purple_500</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/splash_icon</item>
<item name="windowSplashScreenAnimationDuration">200</item>
<item name="postSplashScreenTheme">@style/Theme.MySplashScreen.NoActionBar</item>
</style>
각 구성 요소에 대한 설명은 다음과 같습니다.
- windowSplashScreenBackground: splashscreen의 배경
- windowSplashScreenAnimatedIcon: splashscreen에 표시할 이미지
- windowSplashScreenAnimationDuration: splashscreen이 표시되는 시간으로 최대 1,000ms
- postSplashScreenTheme: splashscreen 처리가 끝나고 전환될 Theme
간혹 splashscreen을 적용한 후 앱을 빌드하면 아래와 같은 에러가 발생하는 경우가 있는데 이는 layout.xml에서 사용하는 화면 구성 요소 중 일부를 splashscreen 테마에서 미지원해서 발생하는 문제로 이러한 문제를 해결하기 위해 splashscreen 처리가 끝나고 전환될 Theme를 지정하는 postSplashScreenTheme를 사용해 전환된 테마를 명시해야 합니다.
Caused by: android.view.InflateException: Binary XML file line #12 in com.00000000.mysplashscreen:layout/activity_main: Binary XML file line #12 in com.00000000.mysplashscreen:layout/activity_main: Error inflating class com.google.android.material.appbar.AppBarLayout
Caused by: android.view.InflateException: Binary XML file line #12 in com.00000000.mysplashscreen:layout/activity_main: Error inflating class com.google.android.material.appbar.AppBarLayout
[Step 3] drawable에 splash_icon.xml 추가하기
drawable에 아래와 같이 splash_icon을 추가해 줍니다.
이미지는 최대 108dp까지만 표시되므로 이미지의 사이즈는 108dp 이하로 설정해야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="108dp"
android:height="108dp"
android:drawable="@mipmap/ic_launcher"
android:gravity="center" />
</layer-list>
[Step 4] AndroidManifest.xml에 splashscreen 테마 추가하기
최초 실행되는 activity의 테마를 아래와 같이 splashscreen로 변경해줍니다.
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.MySplashScreen.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
[Step 5] splashscreen 사용을 위해 초기화하기
splashscreen을 사용하기 위해서는 최초 사용하는 activity에 아래와 같이 splashscreen을 초기화하는 함수를 호출해주어야 합니다.
그렇지 않을 경우, 앱이 실행 될 때 splashscreen이 표시되지 않습니다.
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
super.onCreate(savedInstanceState)
...
}
...
}
정리
Android 12에서 개발자가 직접 splashscreen을 제어해서 사용하기 위해서는 아래와 같은 순서로 처리가 필요합니다.
- build.gradle에 splashscreen 추가하기
- splashscreen 테마 추가하기
- 테마에 사용할 아이콘 추가하기
- splashscreen을 사용할 Activity에 테마 추가하기
- splashscreen 초기화하기
'android Tip' 카테고리의 다른 글
가볍게 보는 Singleton Pattern (kotlin & swift) (1) | 2022.12.05 |
---|---|
android 개발자를 위한 Dispatch Group (0) | 2022.12.01 |
잘되던 카톡 공유하기가 안된다면? (0) | 2021.12.27 |
아이콘 클릭 시 종처럼 흔들리는 애니메이션 효과 주기 (0) | 2021.04.07 |
android Bitmap과 함께하는 즐거운 시간 3번째 (0) | 2021.03.24 |