Здравствуйте, это не мой основной код, но его достаточно близко, чтобы показать мою проблему.Android-обработчик Java, синхронизированный поток (notifyall & Wait)
Мне нужно создать задержку пользовательского интерфейса (дважды) - один за другим Я не мог сделать это с handler.postDelay в одиночку.
поэтому я попытался сделать его с Threading.
Что я хочу сделать, это запустить t2 только после окончания t1.
Может ли кто-нибудь помочь мне?
final Handler handler1 = new Handler();
final Handler handler2 = new Handler();
synchronized(this)
{
Thread t1= new Thread(new Runnable() {
public void run()
{
handler1.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 3s = 3000ms
imgB1.setBackgroundColor(Color.RED);
notifyAll();
}
}, 3000);
}
});
Thread t2= new Thread(new Runnable() {
public void run()
{
handler2.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 3s = 3000ms
imgB1.setBackgroundColor(Color.YELLOW);
}
}, 3000);
}
});
t1.start();
while (t1.isAlive() )
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
t2.start();
}
Не используйте темы и синхронизация, подобная этой. Вы, похоже, также блокируете основной поток пользовательского интерфейса. 'postDelayed()' должен отлично работать для подобных случаев, без привлечения потоков. – laalto
Я не могу использовать только postDelay, потому что мне действительно нужна проверка флага для завершения первой задержки. Пожалуйста, не говорите мне, чтобы установить вторую задержку сообщения больше, это вызовет больше проблем. Так как я могу сделать это с флагом? –
Если runnables зависят друг от друга, отправьте другой после обработки первой i.e. сообщения из самой runnable. – laalto