안드로이드 올바른 스플래시 화면을 구현하기 위한 방법

많은 실험 과정 속에서 안드로이드 스플래시 화면 구현에 대해 좋은 방법을 발견하였습니다. 보통 스플래시 화면 구현은 Activity에서 Runnable을 통해 시간을 지연하는 방식으로 구현합니다. 이는 약간의 문제점을 발생시킵니다.

실제로 스플래시 동안 아무런 작업을 하지 않지만 사용자는 무작정 기다려야 하는 문제가 있습니다. 또한 Application이나 Launch Activity에 많은 작업이 이루어진다면 Activity에서 레이아웃 인플레이트가 지연되어 스플래시 화면이 늦게 뜨는 문제점이 발생됩니다.

이해를 돕기 위해 문제가 되는 앱을 하나 보겠습니다. 메가박스 앱의 경우 실행할 때 검은 화면으로 덮인 후에 스플래시 화면이 뜨는 것을 볼 수 있습니다.

이런 문제점을 보완하여 앱을 로드하는 동안 스플래시 화면을 보여주기 위한 멋진방법을 소개해드리겠습니다.

코드

먼저 스플래시 화면을 사용한 레이아웃을 Drawable로 다시 디자인합니다. layer-list를 이용하여 배경 색상과 로고 이미지를 배치합니다.

이제 Activity에 사용할 테마의 windowBackground값에 이전에 만든 Drawable로 바꿔줍니다.

안드로이드 매니페스트에서 런치 될 Activity의 테마를 위에서 만든 스플래시 테마로 설정합니다.

Activity에서 onCreate전 setTheme를 이용하여 원래의 테마로 돌립니다.

Activity가 실행되기 전에 테마의 Background를 Drawable로 구성된 스플래시 화면을 보여주며 Activity가 생성되고 레이아웃 인 플레이트 되기 전 원래의 테마로 돌려줌으로써 스플래시 화면을 위한 Activity를 새롭게 생성할 필요가 없습니다.

이렇게 간단한 리소스를 이용한다면 앱의 초반 로딩 속도가 늦는 경우 로딩 프로그래스 대신 스플래시 화면을 사용하는 것도 나쁘지 않은 선택이 될 것입니다.

모든 코드는 Github에 공개되어있습니다.

“안드로이드 올바른 스플래시 화면을 구현하기 위한 방법”에 대한 12개의 생각

  1. 스프래시 화면이 너무 빨리 사라지는데 시간을 설정할 수 있는 방법은 없나요?

  2. 방법은 많은데요..
    onCreate에서 setContentView를 조금 늦게 호출 하시거나, 빈 Activity를 중간에 두시는것을 고려해보시면 좋을것 같습니다.

  3. 저도 저런식으로 하얀화면이 나오는걸 방지하기위해 했던적이 있네요.. (옷장앱 루크) 자연스러워서 괜찮은 방법인것 같습니다.

  4. 로고 같은 단순한 이미지일 경우엔 좋은 방법인 것 같은데 fitCenter 같은 전체를 딱 채워야하는 이미지일 경우에 scaleType 조정이 어려운거 같아요 !

  5. 위의 방법으로 했는데, 앱을 종료하고 다시 접속했을 때 스플레시가 않뜨는 건 왜 그런걸까요?
    위의 내용 말고도 또 다른 설정을 해줘야 하는 건가요?

댓글 남기기