Асинхронная резьба останавливает основной поток пользовательского интерфейса - PullRequest
3 голосов
/ 27 апреля 2011

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

                dialog = new ProgressDialog(this);

                dialog.show();

                new Thread(new Runnable() {
                     public void run() {
                         while(imageLoader.isProcessing()) {}
                         doSomething();   
                     }
                 }).run();

Ответы [ 3 ]

9 голосов
/ 27 апреля 2011

Вам необходимо вызвать метод start() анонимного потока, а не метод run().

Из документов :

publicvoid start (): заставляет этот поток начать выполнение;виртуальная машина Java вызывает метод run этого потока.

2 голосов
/ 27 апреля 2011

вызовите метод запуска

я рекомендую использовать AsyncTask, см. this , он имеет надлежащий механизм обработки потоков

см. Также этот пример

0 голосов
/ 27 апреля 2011

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

или, может быть, вам нравится запускать runOnUiThread ()

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