2016-10-06 4 views
1

У меня есть AlertDialog, который установлен для отображения до bluetoothsocket.connect(), что является методом блокировки. Однако AlertDialog не отображается до тех пор, пока не закончится метод bluetoothsocket.connect().Android AlertDialog не будет отображаться до тех пор, пока bluetoothsocket.connect()

myalertdialog.show(); 
// Dialog is not shown. 
mybluetoothsocket.connect(); // This blocks and takes a few seconds to run. 
// Dialog is shown. 

Что может быть причиной такого поведения?

ответ

1

Если ваш bluetoothsocket.connect() блокирует, что вы сказали, вы должны поместить его из основного потока пользовательского интерфейса. Вы можете сделать это внутри AsyncTask. Ваш myalertdialog.show() может быть выполнен непосредственно перед вызовом вашего AsyncTask. Затем позвоните myalertdialog.hide() в AsyncTask's onPostExecute().

+0

Вы правы, код блокировки не должен работать в потоке пользовательского интерфейса. Я переместил его в AsyncTask, как вы упомянули, и теперь он отлично работает. Благодаря!! – pcdangio

0

Поскольку bluetoothsocket.connect блок UI вызывает его на отдельном потоке

final Handler mHandler = new Handler();// This statement is to be called by the main thread 

       myalertdialog.show(); 

       Thread t = new Thread(
         new Runnable(){ 

          public void run() 
          { 

           mybluetoothsocket.connect(); 
           mHandler.post(new Runnable(){ 

            public void run() 
            { 
             //ProgressDialog.dismiss(); 
            } 
           }); 
          }}); 
       t.start();