Как стать автором
Обновить

Комментарии 15

Подход с предустановленным фоном в теме приложения оправдывает себя только с векторными drawable. Растровые же «мылятся», потому как Android принципиально хочет сам выбирать размер для картинки и растягивает её. И как-то на это повлиять можно лишь с 23 API.
Да, это верное замечание.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Делаю строго по вашему коду, единственное android:bottom=«24dp» у вас продублировано несколько раз. Надпись белого цвета в PNG на синем фоне мылит. Какого разрешения картинка должна быть?
Преобразовал PNG с помощью AndroidAssetStudio под разные экраны. Полет нормальный.

Способ с таймерами будет глючить, если в процессе отображения сплеша менять ориентацию экрана. Активити будет пересоздаваться и запускать новый таймер, да еще и без остановки старого. А если отменять предыдущий postDelayed, мы получим бесконечный сплеш.
Выходит, что надо задать в манифесте android:screenOrientation. Но тогда, понятное дело, ухудшается пользовательский опыт, т.к. при запуске приложения вдруг ориентация будет сама меняться.

Думаю, проблему пересоздания Activity приходится решать в любом Android-приложении. В данном случае, действительно, можно запретить смену ориентации в манифесте, либо одним из многочисленных способов сохранять значение таймера и доставать его после пересоздания. Ну, а с учетом того, что еще какое-то время тратится на пересоздание, лучше, на мой взгляд, для Splash Screen Activity жестко задать ориентацию.

Во втором подходе User может быть null, поэтому следует пометить его таковым


private fun routeToAppropriatePage(user: User?)

Но это мелочи. Спасибо за перевод. 2й способ, как по мне, самый гибкий и удобный.

Вы правы по поводу null. Исправил.

«Полное руководство по Splash Screen на Android» должно быть таким:
Пользователю надо дать возможность взаимодействовать с вашим продуктом сразу, как только он нажал на иконку приложения. Поэтому никакого сплэш-скрина не должно быть. Особенно, если он переключается на другое приложение туда-сюда, а памяти мало, и система прибивает активити.
Кстати, если не ошибаюсь, такое было в гайдлайнах 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 тогда, когда для начала работы требуется инициализация «тяжелых» библиотек.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации