<Android>갤럭시 기기에서 splash 화면이 순식간에 지나가는 문제 해결

진섭·2023년 9월 13일
0

Android

목록 보기
31/31
post-thumbnail

📌 문제

  • 에뮬레이터를 이용해 개발하다가 카카오맵 API 때문에 갤럭시 기기로 작업을 하던 중 splah 화면이 너무 빠르게 지나가서 준비한 Gif 애니메이션이 잘 나오지 않는 문제가 발생했습니다.

📌 원인

  • 제가 구현한 splash 화면은 공식 문서에서 나와있는 splash API를 이용해 구현을 하였습니다.
  • 정확한 원인은 알 수 없지만 제가 생각하는 원인은windowSplashScreenAnimationDuration 속성은 splash 화면이 표시될 시간을 지정하는 속성인데 최대 1,000ms라고 합니다. 당연히 갤럭시 기기보다 성능이 안 좋은 예뮬레이터에서는 리소스 로딩이 길어서 예뮬레이터에서 계속 개발하던 저는 이 부분을 미처 생각하지 못했던 거일 수도 있는 거 같습니다.
  • 정확한 원인을 알고 계시면 댓글 부탁드려요🙇

📌 시도한 방법

  1. 처음에는 thread를 이용해 딜레이를 주는 방법을 시도하였지만 splash 화면이 안 나오고 흰 화면에서 딜레이가 되고 이동되서 이 방법은 포기하였습니다.
  2. splash 공식 문서에 스플래시 화면을 화면에 더 오래 표시하기 부분이 있어서 그 코드를 가져와 사용해봤지만 splash 화면이 종료가 안 되네요..
  3. viewModel를 이용한 상태 관리 이 방법을 이용해 문제를 해결하였습니다.

📌 문제 해결

  • splash API를 이용해 splash 화면이 이미 구현된 상황이라고 가정하에 작성하겠습니다.

1. 먼저 splash api를 최신으로 변경하였습니다.

알파 버전은 사용자들이 다운 설치가 안된다고 하네요..

// splashscreen
    implementation("androidx.core:core-splashscreen:1.0.1")

2. ViewModel에 splash 상태 관리

class MainActivityViewModel : ViewModel() {
    // 스플래시 테마 상태 플로우
    private val _postSplashTheme = MutableStateFlow(true)
    val postSplashTheme = _postSplashTheme.asStateFlow()

    init {
        // 스플래시 화면 표시 후 2초 후에 테마를 변경하는 작업 시작
        viewModelScope.launch {
            delay(2000) 
            _postSplashTheme.value = false // 스플래시 테마를 비활성화로 변경
        }
    }
}

3. MainActivity에 ViewModel 연결하고 splash 화면 제어하기

  1. splash 초기화하고 변수에 담아주기
  val splashScreen = installSplashScreen()
        setContentView(R.layout.activity_main)
  1. viewmodel 초기화하기
 mainViewModel= ViewModelProvider(this)[MainActivityViewModel::class.java]
  1. splash 화면을 제어하기
mainViewModel= ViewModelProvider(this)[MainActivityViewModel::class.java]
        splashScreen.setKeepOnScreenCondition {
            mainViewModel.postSplashTheme.value
        }

📌 참고자료

https://developer.android.com/develop/ui/views/launch/splash-screen/migrate
https://developer.android.com/about/versions/12/features/splash-screen?hl=ko
https://patrick-dev.tistory.com/36
https://skyksit.tistory.com/entry/change-splash-api-for-android-12

profile
Android 개발자

0개의 댓글