Personal Study/안드로이드

[Android] [Kotlin] Splash 화면 만들기

vㅔ로 2022. 4. 29. 11:58
728x90

앱은 콜드 스타트, 웜 스타트, 핫 스타트라는 세 가지 상태 중 하나에서 시작하며, 각 상태는 앱이 사용자에게 표시되는 데 걸리는 시간에 영향을 미친다.

콜드 스타트에서는 앱이 처음부터 실행되므로 시간이 가장 오래 걸리게 되는데, 이렇게 앱 로드, UI 준비 과정을 기다리며 보여주는 화면이 Splash (스플래시) 화면이다. 

 

이전에 개발할 때에는 Splash 화면에 대한 이해도가 떨어져 Timer로 시간 제한 (3000 ms 정도)을 두고 구현했으나, 이는 콜드 스타트를 3000ms 만큼 지연시키는 결과를 낳는다. 

그래서 이번에는 올바른 방법으로 구현해보았다. 

 

먼저 theme.xml에서 다음 줄을 추가한다. 

<style name="SplashActivity" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_drawable</item>
</style>

@drawable/splash_drawable은 splash 화면을 어떻게 표시할 지 정의하는 부분이다.

 

<@drawable/splash_drawable>

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/background_color"/>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/app_icon"/>
    </item>
    <item android:top="150dp">
        <bitmap
            android:gravity="center"
            android:src="@drawable/splash_app_name"/>
    </item>
</layer-list>

bitmap 속성으로 png 를 넣을 수 있다.

drawable 속성을 이용하면 배경 색을 정할 수 있다.

 

MainActivity의 코드 부분이다. 

package com.example.asteroid

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.asteroid.login.StartPage

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val nextIntent = Intent(this, StartPage::class.java)
        startActivity(nextIntent)
    }
}

현재 페이지에서 StartPage로 넘어가기 전, Splash 화면이 나타날 것이다.

StartPage의 UI가 모두 그려질 때까지 Splash 화면이 표시된다.

 

<AndroidManifest.xml>

<application>
	...
    <activity
        android:name=".MainActivity"
        android:theme="@style/SplashActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    ...
</application>

theme 속성에 theme.xml에서 만들어둔 style을 사용한다.

 

 

도움 받은 글

https://medium.com/geekculture/implementing-the-perfect-splash-screen-in-android-295de045a8dc

 

Implementing the Perfect Splash Screen in Android

Splash Screen is the first screen visible to the user when the application’s launched. It’s a vital screen that will allow the users to…

medium.com

이 글은 위 포스팅을 기반으로 하여 작성자가 이해한 내용으로 작성되었습니다.

728x90