Comments 15
Способ с таймерами будет глючить, если в процессе отображения сплеша менять ориентацию экрана. Активити будет пересоздаваться и запускать новый таймер, да еще и без остановки старого. А если отменять предыдущий postDelayed, мы получим бесконечный сплеш.
Выходит, что надо задать в манифесте android:screenOrientation. Но тогда, понятное дело, ухудшается пользовательский опыт, т.к. при запуске приложения вдруг ориентация будет сама меняться.
Думаю, проблему пересоздания Activity
приходится решать в любом Android-приложении. В данном случае, действительно, можно запретить смену ориентации в манифесте, либо одним из многочисленных способов сохранять значение таймера и доставать его после пересоздания. Ну, а с учетом того, что еще какое-то время тратится на пересоздание, лучше, на мой взгляд, для Splash Screen Activity
жестко задать ориентацию.
Во втором подходе User может быть null
, поэтому следует пометить его таковым
private fun routeToAppropriatePage(user: User?)
Но это мелочи. Спасибо за перевод. 2й способ, как по мне, самый гибкий и удобный.
Пользователю надо дать возможность взаимодействовать с вашим продуктом сразу, как только он нажал на иконку приложения. Поэтому никакого сплэш-скрина не должно быть. Особенно, если он переключается на другое приложение туда-сюда, а памяти мало, и система прибивает активити.
Кстати, если не ошибаюсь, такое было в гайдлайнах iOS.
Вы воспроизводите "преданья старины". Действительно, в свое время ни Google ("Don't use Splash Screens"), ни авторитетные разработчики ("Personally I think it is not necessary in 98% of the cases") не рекомендовали использовать Splash Screen, называя этот паттерн злом и анти-паттерном. Впоследствии и Google ("Use cold start time effectively with a branded launch theme") и те же разработчики ("Launch Screens: From a Tap to Your App") рассказывали как правильно имплементировать Splash Screen.
Думаю, примером правильного использования Splash Screen могут служить приложения Google.Maps или YouTube, например.
Полное руководство по Splash Screen на Android