스플래쉬 화면이란?

어플리케이션이 처음 켜질 때 나오는 화면

데이터 로딩 시 안드로이드 기준 흰색 빈 화면이 노출되는데,
이것을 대신할 화면이다.

왜 필요할까?

앱의 첫인상 같은 것이다.
예를 들어, 기술적으로 보았을 때에는 유저의 체감상 거기서 거기인 A와B앱이 있다
그런데 B앱에서는 자신의 어플 컨셉에 맞춘 특정 화면을 띄워준다.
앱을 처음 깐 유저의 입장에서는 당연 B라는 앱에 대한 신뢰도가 올라갈 수 밖에 없다.

만드는법과 예시

어떻게 만들까?

아마 포토샵 등에 좀 더 능숙한 사람이라면, 나보다는 더 그럴싸하게 만들 수 있을 것이다.
나는 그런 것들을 일체 할 줄 모르기 때문에 간단하게 내 앱과 관련된 작은 아이콘을 다운로드 받고
간단하게 circleImageView라이브러리를 사용하여 이미지를 가공하였다.

xml 코드

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="@drawable/backgroundcolor"
    android:layout_height="match_parent">
    <de.hdodenhof.circleimageview.CircleImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/coffeelogo"
        android:layout_margin="100dp"
        app:civ_border_width="5dp"
        app:civ_circle_background_color="#F3E5F5"
        app:civ_border_color="#493005"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="40dp"
        android:text="맛의 기록, 테이스팅 노트"
        android:textColor="#432D02"
        android:textSize="25dp"
        android:textStyle="italic" />


</LinearLayout>

따로 설명은 필요 없을 정도로 정말 간략하게 짠 코드이다
만약 CircleImageView를 전혀 모른다면 공부 시 참조 링크에 올라와있는 첨부를 보면 정말 자세히 나와있다

splash kotlin코드

🟩내가 사용한 방법
미리 말하자면 내가 다시 만든다면, 이 방법으로 굳이 만들 것 같지는 않다
차라리 glide의 딜레이 현상을 처리하며 프로그래스바를 설정했던 방식을 사용하거나 할 것 같다.
Handler을 사용한 방법은 시간을 내 마음대로 설정하는 것도 쉽고, 나같은 초보자도 쉽게 코드를 작성할 수 있으나
로딩이 Handler에 설정한 시간보다 길어질 시 흰 화면이 노출되는 상황이 생길 수 있다.

class splash:ComponentActivity(){
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activitysplash)
        Handler().postDelayed(Runnable {
            val intent=Intent(this,MainActivity::class.java)
            startActivity(intent)
            finish()
        }, 3000)
    }
}

🟩코루틴이나 쓰레드를 이용하는 방법
사실 이 두개의 차이는 아직 잘 모르겠다.
일단, 내가 사용한 방법에 비해 복잡한 대신 스플래쉬 화면이 뜨는 시간을 보다 유동적으로 조절이 가능하다.

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.*

class SplashActivity : AppCompatActivity() {

    // MainScope를 생성하여 코루틴을 실행
    private val mainScope = MainScope()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        // launch 함수를 사용하여 백그라운드에서 작업을 수행
        mainScope.launch {
            try {//자신이 할 작업 내용

                // 작업이 끝나면 MainActivity로 이동
                val intent = Intent(this@SplashActivity, MainActivity::class.java)
                startActivity(intent)
                finish()

            } catch (e: Exception) {
                // 예외 처리
                e.printStackTrace()
            }
        }
    }

    // Activity가 소멸될 때 코루틴의 작업도 함께 취소
    override fun onDestroy() {
        super.onDestroy()
        mainScope.cancel()
    }
}

기본적인 틀은 이렇게 이것을 좀 더 변환시켜서 사용할 수 있다.

추가 예정 사항

코루틴과 쓰레드를 사용하는 방식의 차이에 대해 공부하고,
게시물 작성 완료 되면 공부 시 참조 링크에 업로드 예정

공부 시 참조 링크

스플래쉬 화면에 대해 더 알고싶다면?
서클 이미지 뷰 만들기

댓글남기기