Мне нужно поработать над потоком пользовательского интерфейса, в частности настроить некоторые представления и т. Д. - это невозможно сделать в фоновом потоке. Процесс вызывается по нажатию кнопки и занимает около секунды или около того - без диалогового окна прогресса это выглядит так, как будто приложение заморожено. Я использую диалог прогресса с AsynTask
s в нескольких местах, и он работает нормально - однако здесь я борюсь.
Я начал с простого:
showDialog(DIALOG_PLEASE_WAIT);
viewInfo.setFromGuide(true); //this method just sets a variable
viewInfo.setVenue(venue); //this method does a lot of UI manipulation and takes a second or so
showScreen(VIEW_INFO); //this method shows the corresponding view in ViewFlipper
dismissDialog(DIALOG_PLEASE_WAIT);
Однако диалоговое окно не будет отображаться (что-то вроде ожидаемого, поскольку все это в потоке пользовательского интерфейса.
Затем я изменил код на это:
Handler hnd = new Handler() {
@Override
handleMessage(Message m) {
viewInfo.setFromGuide(true);
viewInfo.setVenue(venue);
showScreen(VIEW_INFO);
dismissDialog(DIALOG_PLEASE_WAIT);
}
}
showDialog(DIALOG_PLEASE_WAIT);
new Thread() {
public void run() {
hnd.sendEmptyMessage(0);
}
}.start();
Это по-прежнему не показывает диалог - естественно, работа с пользовательским интерфейсом в handleMessage
все еще выполняется в потоке пользовательского интерфейса. Итак, что я могу сделать, чтобы показать диалог прогресса?