[英]Android Studio Delay inside Loop
我想按用戶想要的時間循環播放,但要延遲3秒。
這是代碼:
for (i = 0;i < n1; i++){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(KeyMapCreator.this, "Try number " + i,Toast.LENGTH_SHORT).show(); ActionIwantToDo();
}
},3000);
}
變量i是用戶設置的變量 。 問題在於烤面包片不會每3秒顯示一次,它就像沒有延遲的正常循環一樣。 我以為是因為烤面包的時間,但是如果我將時間設置為20秒,還是一樣。 有人知道如何在循環內進行適當的延遲嗎???
處理程序只是安排一些工作,以便以后執行。 它實際上並沒有阻塞當前線程。 您要做的只是安排n1
項工作在三秒后執行,所有工作都將在確切的延遲后按順序執行。
您實際上根本不想編寫代碼來阻塞主線程。 永遠。 它將使您的應用似乎無響應。
您的問題是您的循環會立即創建許多處理程序,並延遲3秒鍾,然后顯示吐司。 它們不會彼此等待,並且因為它們是在彼此之間的毫秒內創建的,所以它們將同時顯示吐司。
我不確定您要完成什么,循環可能不是您想要的。 但是,這是一種使吐司在3秒后和之后每3秒顯示多次的方法。
為此,我們將使用遞歸,因為它將使您不會在主線程上被阻塞。
doSomething(0, 3)
private void doSomething(int i, int n) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (i < n) {
Toast.makeText(KeyMapCreator.this, "Try number " + i,Toast.LENGTH_SHORT).show();
actionIWantToDo();
doSomething(i+1, n);
}
}
}, 3000);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.