Как мы все знаем, многие приложения для Android очень ненадолго отображают белый экран, прежде чем они Activity
попадают в фокус. Эта проблема наблюдается в следующих случаях:
Приложения для Android, расширяющие глобальный
Application
класс и выполняют в нем основные инициализации.Application
Объект создается всегда перед первымActivity
(факт , что можно наблюдать в отладчике), так что это имеет смысл. Это причина задержки в моем случае.Приложения Android, отображающие окно предварительного просмотра по умолчанию перед заставкой.
Настройка здесь android:windowDisablePreview = "true"
явно не работает. Я также не могу установить родительскую тему экрана-заставки, Theme.Holo.NoActionBar
как описано здесь , потому что [к сожалению] мой экран-заставка использует файл ActionBar
.
Между тем, приложения, которые не расширяют Application
класс , не показывают белый экран при запуске.
Дело в том, что в идеале инициализации, выполняемые в Application
объекте, должны происходить до того, как Activity
будет показана первая . Итак, мой вопрос: как я могу выполнить эти инициализации при запуске приложения без использования Application
объекта? Возможно, с помощью Thread
или Service
, я полагаю?
Это интересная проблема, над которой стоит задуматься. Я не могу обойти это обычным способом (установив NoActionBar
тему), так как, к сожалению, у моего экрана-заставки есть ActionBar
некоторые причины, не связанные с этим.
Примечание:
Я уже затронул следующие вопросы:
Ссылки:
Application
класса. Это связано с тем, что более новые версии Android используют способ «холодного запуска» приложений. Google фактически рассмотрел время запуска на Google I / O в этом году, и оно будет исправлено на N, насколько я помню. А пока вам стоит взглянуть на то, что Google называет «фирменным экраном запуска». Вот пример того, как его создать: antonioleiva.com/branded-launch-screen - никакого белого экрана в начале ;-) И, пожалуйста, не используйте заставки - это раздражает пользователя.Ответы:
Проблема с белым фоном вызвана холодным запуском Android при загрузке приложения в память, и ее можно избежать следующим образом:
макет
img лицо
Добавьте эту тему на свой экран-заставку в манифесте
что даст такой эффект
для получения дополнительной информации и дополнительных решений вы можете проверить этот BlogPost
источник
пожалуйста, добавьте эту строку в свою тему приложения
для получения дополнительной информации: https://developer.android.com/topic/performance/vitals/launch-time#themed
источник
Скопируйте и вставьте эти две строки в свою тему приложения манифеста, то есть res / styles / AppTheme. тогда это будет работать как шарм ..
источник
Прежде всего, чтобы убрать белый экран, прочтите это - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Но что более важно, оптимизируйте начальную нагрузку и отложите любую тяжелую работу до того момента, когда у вас будет время ее выполнить. Разместите здесь свой класс приложения, если хотите, чтобы мы его рассмотрели.
источник
Рекомендуемый способ решения этой проблемы в ответах отсутствует. Я добавляю сюда свой ответ. Проблема с белым экраном при запуске возникает из-за начального пустого экрана, который системный процесс рисует при запуске приложения. Обычный способ решить эту проблему - отключить этот начальный экран, добавив его в свой
styles.xml
файл.Но согласно документации Android, это может привести к увеличению времени запуска. Рекомендуемый способ избежать этого начального белого экрана в соответствии с Google - использовать активность
windowBackground
атрибут темы действия и предоставить простой настраиваемый чертеж для начального действия.Как это:
Файл с возможностью рисования,
my_drawable.xml
Создайте новый стиль в своем
styles.xml
Добавьте эту тему в свою начальную деятельность в файле манифеста
И когда вы хотите вернуться к обычному вызову темы
setTheme(R.style.Apptheme)
перед вызовомsuper.onCreate()
иsetContentView()
Это рекомендуемый способ решения проблемы, взятый из шаблонов дизайна материалов Google .
источник
Вы пробовали установить
android:windowBackground
атрибута в теме вашей активности запуска либо цвет, либо возможность рисования?Например это:
при добавлении в тему активности Launcher при запуске будет отображаться черный цвет (а не белый цвет). Это простой трюк, позволяющий скрыть длительную инициализацию, показывая что-то вашим пользователям, и он отлично работает, даже если вы создаете подкласс объекта Application.
Избегайте использования других конструкций (даже потоков) для выполнения длительных задач инициализации, потому что вы можете оказаться не в состоянии контролировать жизненный цикл таких конструкций. Объект Application - правильное место для выполнения именно этого типа действий.
источник
Я добавил следующие две строки в свою тему в styles.xml
Работал как шарм
источник
У меня была такая же проблема, вам нужно обновить свой стиль.
style.xml
Ваш файл манифеста должен выглядеть, как показано ниже.
Outout:
Надеюсь, это поможет тебе.
источник
В методах обратного вызова жизненного цикла вы можете объявить, как будет вести себя ваше действие, когда пользователь покидает и снова входит в действие. Помните, что в дизайне Android есть жизненный цикл для каждого приложения. Если вы поместите слишком большую нагрузку на
onCreate()
метод (это метод, используемый для загрузки файлов макета и инициализации любых элементов управления, которые у вас есть), тогда белый экран станет более заметным, так как файл макета будет загружаться дольше.Я предлагаю использовать несколько разных методов, начиная деятельность. Таковы
onStart()
(вызываемые первым делом после загрузки приложения),onActivityCreated()
(вызывается после отображения макета и полезен, если вы выполняете какую-либо обработку данных при запуске действия).Чтобы вам было проще, ниже представлена официальная диаграмма жизненного цикла активности:
источник
Activity
, а глобальнымApplication
объектом. И я не верю, что могу применить там такое разделение проблем, потому что, в отличие от этого, уActivity
него есть толькоonCreate()
метод.Application
объекта и переместить весь код инициализации на первыйActivity
...Вы пробовали поставить инициализацию на
onActivityCreated
?Внутри
Application
класса:источник
Поскольку вы уже знаете, почему появляется этот белый экран, например, из-за фоновых процессов, инициализации приложения или больших файлов, просто ознакомьтесь с приведенной ниже идеей, чтобы избежать этого.
Чтобы предотвратить появление этого белого экрана в начале приложения, одним из способов является экран-заставка, это просто способ не окончательный, и вы должны его использовать.
Когда вы покажете заставку из вашего файла splash.xml, эта проблема останется прежней,
Таким образом, вам нужно создать стиль ont в файле style.xml для экрана-заставки, и там вы должны установить фон окна в качестве изображения-заставки, а затем применить эту тему к своей активности-заставке из файла манифеста. Итак, теперь, когда вы запустите приложение, сначала оно установит тему, и таким образом пользователь сможет видеть непосредственно заставку вместо белого экрана.
источник
Оба свойства работают
источник
Пожалуйста, попробуйте это один раз.
1) Создайте файл с возможностью рисования splash_background.xml
2) Поместите это в styles.xml
3) В файле AndroidMainfest.xml установите для указанной выше темы значение «Запуск действия».
источник
Просто напишите элемент в values / styles.xml:
Например, в AppTheme:
источник
источник
Для тех, у кого этот белый экран во время отладки, имейте в виду, что при отладке загрузка займет больше времени. Если вы создадите релиз APK и установите его на свой телефон, вы заметите, что он загружается намного меньше.
Таким образом, время запуска с версией отладки не равно времени запуска с версией выпуска.
источник