Перед тем, как я высмеял, для блокирования основного потока пользовательского интерфейса, вот сценарий:Как показать progressdialog, когда основной поток пользовательского интерфейса заблокирован?
- Услуга, проходит один раз в день - занимает около 15 секунд, чтобы закончить. Операции Тяжелое базы данных
- По совпадению пользователь запускает приложение в течение этого времени
- Домашний экран загружает данные из базы данных
- Но поскольку база данных заблокирована (шаг 1), это выдает ошибку.
Поэтому мне нужно ЗАМОРАЖИВАТЬ поток пользовательского интерфейса, пока служба не будет завершена. Нет AsyncTask, потому что пользовательский интерфейс продолжит выполнение и выдаст ошибку. Мне удалось отключить функцию onResume до тех пор, пока сервис не завершится. Но за это время я не могу показать какие-либо диалоги, в которых пользователь должен ждать или любой индикатор прогресса, говорящий пользователю сидеть сложа руки.
Если я пытаюсь
start onResume
if (service is running?)
show progress dialog
while the service is running, thread.sleep
dismiss progress dialog
end onResume
Нить спит хорошо и просыпается большой. Но проклятый диалог прогресса не отображается до тех пор, пока onResume ... не возобновится! В нижней строке, как мне показать индикатор (progressdialog или диалог), прежде чем я поставлю основной поток в режим сна?
Я открыт для решений, которые загружают другую деятельность до тех пор, пока услуга не возобновится. Я пробовал это, но предыдущее действие продолжается счастливо: |
Спасибо - я попробую ваш совет о создании «загрузочной активности» и дам вам знать, как это работает. Мне нужно найти способ убедиться, что активность вызывается первым, даже если пользователь переходит на главный экран и возвращается. Хм ... –
Это, в конечном счете, было лучшим решением –