Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio延迟内部循环_Java_Android_Delay - Fatal编程技术网

Java Android Studio延迟内部循环

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

我想做一个循环,用户想要的时间,但延迟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=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秒显示多次的方法

为此,我们将使用递归,因为它将使您不会在主线程上被阻塞

  • 从需要函数启动的位置调用doSomething(递归函数)(请记住,第二个变量是您希望它运行的次数,0只是需要作为计数器)
  • 创建doSomething
  • 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);
    }