首页 > 解决方案 > 循环内的 Android Studio 延迟

问题描述

我想制作一个循环,用户想要的时间但延迟 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 秒仍然是一样的。有人知道如何在循环中进行适当的延迟???

标签: javaandroiddelay

解决方案


您遇到的问题是您的循环一次创建许多处理程序,延迟 3 秒,然后显示敬酒。它们不会互相等待,因为它们是在彼此相隔几毫秒内创建的,所以它们会同时显示 toast。

我不确定您要完成什么,并且循环可能不是您想要的。然而,这是一种在 3 秒后和每 3 秒后多次显示吐司的方法。

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

  1. 从您需要函数开始的地方调用 doSomething (递归函数)(请记住,第二个变量是您希望它运行的次数,而 0 只是需要作为计数器)
doSomething(0, 3)
  1. 创建做某事
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);
}

推荐阅读