Можно ли что-то отобразить до того, как основное действие завершится onCreate() в Android?
Учитывая приложение с одним действием как это:
public class MyActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
loadingScreen = new RelativeLayout(this);
// add a bitmap to loadingScreen
setContentView(loadingScreen);
Dict dict = new Dict();
dict.init();
// this method takes ~10 seconds
}
}
Теоретически, похоже, что при инициализации словаря будет отображаться экран загрузки. На практике ничего не отображается до onCreate()
возвращается, поэтому пользователь видит пустой белый экран в течение 10 секунд. Каков наилучший способ отобразить, пожалуйста, подождите, пока это приложение загружает экран?
Я считаю, что я мог бы создать отдельную тему для dict.init()
, но это кажется излишним в этом случае, потому что я не хочу, чтобы приложение было пригодным для использования или интерактивным dict.init()
пробеги. Я бы хотел, чтобы он запускался в главном потоке (и зависал во время выполнения остальной части приложения), я просто хочу сначала что-то отобразить на экране.
PS, я пытался переехать dict.init()
в onStart()
, который, казалось, не имел никакого эффекта.
редактирование: возможно, мне следовало бы уточнить это, чтобы избежать получения ответов типа "Вы делаете неправильно", но инициализация занимает 2 или 3 секунды на современных телефонах и таблицах, 10 секунд - наихудший случай на старых телефонах. Это приложение представляет собой игру в слова, ее нельзя использовать без словаря. перемещение dict.init()
асинхронная задача не улучшит работу пользователя, и я задал вопрос, возможно ли без заставки отобразить заставку. Я понимаю, что ответ "Нет"
1 ответ
Я бы хотел, чтобы он запускался в главном потоке (и зависал во время выполнения остальной части приложения)
Нет, нет, и ваши пользователи тоже не будут вам нравиться
Я полагаю, что мог бы создать отдельный поток для dict.init(), но в этом случае это кажется излишним, потому что я не хочу, чтобы приложение было пригодным для использования или интерактивным во время работы dict.init ().
Это именно то, что вы должны сделать. Вы можете использовать различные способы, включая AsyncTask и показать ProgressDialog
пока работа ведется.
поэтому пользователь видит пустой белый экран в течение 10 секунд.
Если это займет так много времени, то вы можете пересмотреть свой поток. Даже если вы идете с отдельным Thread
и показать ProgressBar
Большинство пользователей не хотят смотреть на это в течение 10 секунд. Вы должны загрузить данные в фоновом режиме и позволить им делать что-то еще во время загрузки, если это возможно. Вы можете использовать что-то вроде IntentService в зависимости от того, как вы получаете данные.