Android - показывать диалог прогресса при выполнении работы в потоке пользовательского интерфейса - PullRequest
1 голос
/ 20 января 2012

Мне нужно поработать над потоком пользовательского интерфейса, в частности настроить некоторые представления и т. Д. - это невозможно сделать в фоновом потоке. Процесс вызывается по нажатию кнопки и занимает около секунды или около того - без диалогового окна прогресса это выглядит так, как будто приложение заморожено. Я использую диалог прогресса с 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 все еще выполняется в потоке пользовательского интерфейса. Итак, что я могу сделать, чтобы показать диалог прогресса?

Ответы [ 2 ]

0 голосов
/ 20 января 2012

Если это действительно занимает a second or so to complete, чем, возможно, вы можете просто использовать простое уведомление о тосте с сообщением типа «Пожалуйста, подождите»

0 голосов
/ 20 января 2012

при использовании AsyncTask вы можете переопределить onProgressUpdate, который вызывается при каждом вызове publishProgress() изнутри doInBackGround, поэтому вы можете плавно публиковать результаты, работая в фоновом режиме, поскольку onProgressUpdate работаетпоток пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...