코드를 먼저 살펴보자.
splash activity -> main activity로 실행된다.
Handler().postDelayed({
startActivity(Intent(this, MainActivity::class.java))
finish()
}, 3000)
처음에 이에 대해서 생각할때는, 화면을 보여준상태에서 타이머를 설정해 인텐트로 다음 액티비티로 넘어가는 방식을 떠올렸다.
그러나 이 방식은 인텐트실행 후 스플래쉬 액티비티를 바로 종료할 수 없는 문제가 있다.
따라서 고전적인 방식인 Handler를 사용해야한다.
https://developer.android.com/reference/kotlin/android/os/Handler?hl=en
쓰레드를 방식으로 runnable로 사용한다.
위 코드와 같이 적으면 3000ms 이후 intent실행이라는 얘기다.
그러나 이렇게 진행했을때,
아주 보기 싫은 줄 하나가 그어져있다.
'constructor Handler()' is deprecated. Deprecated in Java
핸들러가 예기치않은 결과를 뿜을 수 있으니 Executor를 사용하거나 명료하게 핸들러를 사용하라는 메시지다. 구글링을 해봐도, 스택오버플로의 답변들을 봐도 핸들러를 사용하는 splash activity 예시가 대다수이니 일단 사용하겠다.
그러나 아래와 같은 포스팅도 찾을 수 있었다.
https://medium.com/geekculture/implementing-the-perfect-splash-screen-in-android-295de045a8dc
application theme을 사용한 스플래시 화면을 만드는 것이다.
단순히 액티비티를 만드는 것보다는 손이 많이 가지만, 확실히 좀더 세련되게 바뀐다.
여기에 사용된 kotlin코드는 딱 두줄이다.
class SplashScreenActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startActivity(Intent(this@SplashScreenActivity, MainActivity::class.java))
finish()
}
}
다시 보면 setContentView가 없는 걸 볼 수 있다. 다만 이걸 바로 사용하기 보다는 메인 액티비티에 사용될 리소스들이 load되는시간을 runnable로 구현해 위와 같이 적용한다면 멋있는 splash를 구현 할 수 있겠다.
"댓글, 공감 버튼 한 번씩 누르고 가주시면 큰 힘이 됩니다"