0

Моему приложению нужно загрузить JSON, прежде чем он сможет отобразить что-либо в пользовательском интерфейсе, JSON определяет, как приложение должно быть тематическим.Android onCreate и AsyncTask delay

Хотя я обычно не люблю их, необходим экран заставки/экрана загрузки, чтобы пользователь не должен видеть каждый элемент интерфейса цвета изменения и т. Д. Моя проблема заключается в том, что когда я загружаю свой app, я могу увидеть стиль по умолчанию в течение нескольких секунд, прежде чем запускается диалог выполнения. Я вижу фон по умолчанию темного градиента с головоломкой, с панелью действий, содержащей мое название приложения. Если я скрою панель действий в XML, я не могу добавить ее обратно позже и получаю nullpointerexceptions, действуя на нее.

Я попытался запустить заставку в самом начале onCreate(), прежде чем я даже создал свой AsyncTask, а также попытался его запуска в onPreExecute().

Я хочу иметь возможность в идеале иметь способ отображения диалогового окна загрузки сразу, когда приложение запускается, или если есть задержка, я просто хочу, чтобы пользователь увидел черный фон.

Есть ли совершенно другой способ сделать это, о котором я не упомянул?

Спасибо.

+1

использовать раздельную активность как splashscreen – njzk2

+0

Как я мог стилизовать и загрузить контент в моей (текущей) MainActivity из отдельной активности заставки? – SteveEdson

+0

почему бы и нет? – njzk2

ответ

1

Я бы на самом деле рассмотрел возможность использования фрагментов здесь. У вас может быть фрагмент для вашего экрана всплеска и загрузить его, когда ваша деятельность начнется сначала. Затем, после завершения загрузки/разбора json, вы можете загрузить второй «экран» в качестве второго фрагмента, используя FragmentTransaction, и замените его на экране загрузки. Это также позволит вам сделать приятную анимацию перехода.

Это можно сделать так же, как комментарий от njzk2, с двумя отдельными действиями. По сути, вы должны будете разыгрывать AsyncTask во время «загрузки» и сохранять результат как сериализуемый объект, который может быть передан другому вашему действию с использованием Intent extra, или вы можете сохранить json в словаре SharedPreferences и ссылаться на то, что в вашем вторая активность.

Вы также можете обнаружить, что это не обязательно делать каждый запуск. Если это так, вы должны сохранить либо сериализуемое на диск, чтобы вы могли пропустить синтаксический анализ или общие настройки, чтобы вы могли ссылаться на него там, если он существует.

0

Что вы видите, это пустая деятельность, соответствующая вашей теме. Итак, вы ничего не можете сделать - это будет показано, если операция бутстрапинга занимает некоторое время.

Что вы можете сделать, это установить специальную тему в вашей деятельности с помощью заставки, как windowBackground (фон декора окна), а затем удалить фон позже, если вам это не понадобится.

<style name="SplashScreenActivityTheme" parent="android:Theme.Light.NoTitleBar"> 
     <item name="android:windowBackground">@drawable/splash_image</item> 
</style> 

Подробнее об этом вы можете прочитать больше here in fresh post of Cyril Mottier

Одно уведомления: Android обычно не используют заставки. Вы можете использовать некоторый индикатор прогресса, такой как ProgressBar или что-то еще, если ваш дизайнер не против этого

+0

Это немного усложняется, иногда изображение для экрана заставки может меняться, но оно все равно будет использовать локальное изображение в файловой системе. Поэтому установка фона в xml (по существу, жесткого кодирования) не была бы действительно подходящей. Спасибо за ответ и статью, хотя я прочитал это сейчас. – SteveEdson

Смежные вопросы