我想按用户想要的时间循环播放,但要延迟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秒,还是一样。 有人知道如何在循环内进行适当的延迟??
答案 0 :(得分:0)
处理程序只是安排一些工作以供以后执行。它实际上并没有阻塞当前线程。您要做的只是安排n1
个工作项在三秒钟后执行,这些工作将在该确切延迟后按顺序执行。
您实际上根本不想编写代码来阻塞主线程。曾经它将使您的应用似乎无响应。
答案 1 :(得分:0)
您遇到的问题是您的循环会立即创建许多处理程序,并延迟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);
}