Android — правильный способ ожидания создания объекта-обработчика

#android

#Android

Вопрос:

Люди,

Вот упрощенный код для моего фонового потока:

     public class MyThread extends Thread {
      private Handler _handler;

      public void run() {
         Looper.prepare();
         this._handler = new Handler();
         Looper.loop();
      }

      public void DoSomething() {
         if (!this.isAlive()) {
            this.start();
         }

         this._handler.post(blah);
      }
    }
  

Проблема, с которой я сталкиваюсь, заключается в том, что фоновый поток, возможно, еще не создал объект-обработчик при вызове post() . По сути, мне нужен цикл ожидания для инициализации объекта-обработчика. Какой сгенерированный принятый способ сделать это под Android?

Заранее благодарим вас за помощь.

С уважением, Питер

Комментарии:

1. Вы имеете в виду «.. создал объект-обработчик при выполнении вызова doSomething() «?

2. По сути, да. Мы не знаем, что объект-обработчик не будет создан до тех пор, пока start() не будет вызван (в первый раз) из doSomething() . Но нам нужно дождаться запуска потока bg и создания объекта-обработчика. В настоящее время у меня есть цикл while, в котором я сплю в течение 50 мс и проверяю, был ли создан обработчик. Мне интересно, есть ли лучший способ. Спасибо

Ответ №1:

Вы можете установить флаг после инициализации обработчика и дождаться этого флага перед вызовом post .

Простой способ дождаться флага в параллельной системе — использовать CountDownLatch . Он будет начинаться с 1 и уменьшаться после инициализации обработчика. Ознакомьтесь с подробностями здесь: http://download.oracle.com/javase/1 ,5,0/docs/api/java/util/concurrent/CountDownLatch.html