Java Android Studio延迟内部循环
我想做一个循环,用户想要的时间,但延迟3秒 代码如下:Java Android Studio延迟内部循环,java,android,delay,Java,Android,Delay,我想做一个循环,用户想要的时间,但延迟3秒 代码如下: for (i = 0;i < n1; i++){ new Handler().postDelayed(new Runnable() { @Override public void run() { Toast.makeText(KeyMapCreator.this, "Try number " + i,Toas
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=0;i{
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
Toast.makeText(KeyMapCreator.this,“Try number”+i,Toast.LENGTH_SHORT).show();ActionIwantToDo();
}
},3000);
}
变量i是用户设置的变量。
问题是土司并不是每3秒钟出现一次,它就像一个正常的循环一样,没有延迟。我以为是因为祝酒的时间,但如果我把时间设为20秒,时间还是一样的。
有人知道如何在循环中进行适当的延迟吗?处理程序只是为以后的执行安排一些工作。它实际上并不阻止当前线程。您所做的就是将
n1
项工作安排在三秒钟后执行,这些工作都将在该确切延迟时间内按顺序执行
你真的不想写代码来阻止主线程。曾经这会使你的应用程序看起来没有响应。你的问题是,你的循环一次创建了许多处理程序,这些处理程序会延迟3秒,然后显示toast。它们不会互相等待,因为它们是在相互之间的毫秒内创建的,所以它们将同时显示吐司 我不确定您想要完成什么,循环可能不是您想要的。然而,这是一种让烤面包片在3秒后和之后每隔3秒显示多次的方法 为此,我们将使用递归,因为它将使您不会在主线程上被阻塞
private void doSomething(inti,intn){
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
if(i
但是如果我想延迟“ActionIwantToDo()”我怎么能在循环内完成呢?我是说你不应该这么做。也许你只是想增加每项预定工作的延迟。那么,我怎样才能使一个无效重复一定次数而不会导致应用程序崩溃?(我的sry很糟糕)那么,我怎样才能使循环等待操作完成,然后重新启动该操作?我不确定循环是你需要的。我编辑了我的答案,以表明你必须递归地解决这个问题。这将允许您以3000毫秒的延迟运行actionIWantToDo()任意次数。我也这样做了。如果我这样做,例如延迟3秒,用户输入要重复的次数,例如4次。它以12秒的延迟结束,突然4次动作与自身发生碰撞。不知道如何解决它你所说的“动作与自身冲突”是什么意思?动作是创建一个文件,但创建文件大约需要一秒钟。我想要的是创建您想要的文件数量,但即使使用延迟,它也只创建一个文件,而不是您选择的数量。
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);
}