Note: all listed ways are legacy implementations before Android 12 (S). Android 12 offers SplashScreen API to implement splash screen.
Uses theme (styles.xml) to show static splash screen. Simple but effective way.
This approach uses Handler with fixed timeout and animations to make splash screen fancier. Runnable makes sure to route user to next activity. Also you can skip initial blank screen by using same theme trick which is shown in previous example. Problems (memory leaks etc.) with this approach are mainly due to usage of Handler (which is deprecated!).
Solves problems with Handler by using Kotlin Coroutines. Also uses theme to impove splash screen (initial blank screen is replaced by background).