#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