[英]How can I programmatically cause a delay in Android?
我嘗試使用Thread.sleep()
但是沒有用。 當我使用它時,該應用程序停止響應。
我需要在代碼中添加一些延遲,例如:
public void inicioJogo(){
for (int jogada = 1; jogada <= 50; jogada++) {
for (int contador = 0; contador < jogada; contador++){
// HERE - Wait 1 sec before go to next line.
btPedra[sequencia[contador]].setBackgroundResource(imagensHover[sequencia[contador]]);
// HERE - Wait 1 sec before go to next line.
btPedra[sequencia[contador]].setBackgroundResource(imagensNormal[sequencia[contador]]);
// Now continue looping.
}
}
}
我嘗試使用Handler,如下所示:
private Handler handler = new Handler();
for (int jogada = 1; jogada <= 50; jogada++) {
for (int contador = 0; contador < jogada; contador++){
handler.postDelayed(new Runnable () {
@Override
public void run() {
btPedra[sequencia[contador]].setBackgroundResource(imagensHover[sequencia[contador]]);
}
}, 1000);
}
}
但是,當我使用它時,循環將繼續,然后等待1秒。 我需要一個可以使循環停止1秒鍾的延遲,轉到下一行,然后繼續循環。
您可以使用ScheduledExecutorService
類的
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(NO_OF_THREADS);
ScheduledFuture scheduledFuture =
scheduledExecutorService.schedule(task, NO_OF_SECONDS_TO_WAIT, TimeUnit.SECONDS);
現在,在延遲NO_OF_SECONDS_TO_WAIT之后執行“任務”
它沒有響應的原因是因為您在當前線程上調用了sleep。 您正在處理的當前線程是UI線程。 因此,基本上,您嘗試更改背景,然后使線程休眠,以防止實際更改線程,直到完成休眠為止。
您需要在另一個線程中運行循環並在那里休眠,這樣才不會影響主線程:
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
for (int jogada = 1; jogada <= 50; jogada++) {
for (int contador = 0; contador < jogada; contador++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
btPedra[sequencia[contador]].setBackgroundResource(imagensHover[sequencia[contador]]);
}
});
}
}
}
}).start();
請注意, 在啟動新線程之前,通過您創建的處理程序來完成后台更改。 該處理程序是在當前線程(即UI線程)上創建的,發布到它的每個消息都將在該線程上運行。
因此,基本上,您循環並在另一個線程上等待,但在UI線程上進行了后台更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.