【问题标题】:Wait for 5 seconds等待 5 秒
【发布时间】:2017-05-30 14:01:34
【问题描述】:

我想在启动另一个公共 void 方法之前等待 5 秒。线程睡眠对我不起作用。如果有一种不使用线程的wait() 方式,我很想知道这一点。

public void check(){
    //activity of changing background color of relative layout
}

我想在更改相对布局颜色之前等待 3 秒。

【问题讨论】:

标签: android wait


【解决方案1】:

我更喜欢的是

(new Handler()).postDelayed(this::here is your method,2000);

【讨论】:

    【解决方案2】:

    只需使用 lambda 添加单行

    (new Handler()).postDelayed(this::yourMethod, 5000);
    

    编辑澄清:yourMethod 指的是您要在 5000 毫秒后执行的方法。

    【讨论】:

    • 良好而快速的解决方案,但这个解决方案不能满足所有需求。很好的例子——当你需要等待从适配器执行/调用活动方法时。
    • 这是同步的还是异步的?
    • 这并没有真正等待它,它只是稍后执行一个函数。 . .
    • (new Handler(Looper.getMainLooper())).postDelayed(null, 5000);因为没有破坏构造,如果你想等待没有任何方法调用传递 null
    【解决方案3】:

    这对我有用:

        val handler = Handler()
        handler.postDelayed({
            // your code to run after 2 second
        }, 2000)
    

    【讨论】:

      【解决方案4】:

      我对我的 android 应用程序使用以下代码(与您之前看到的相同),我需要等待一些线程才能开始我的新方法。它工作正常。

       Handler handler = new Handler();
              handler.postDelayed(new Runnable() {
                  public void run() {
                      // yourMethod();
                  }
              }, 5000);   //5 seconds
      

      【讨论】:

        【解决方案5】:

        导入使用:import android.os.Handler;

         new Handler().postDelayed(new Runnable() {
                    public void run() {
                        // yourMethod();
                    }
                }, 5000);   //5 seconds
        

        【讨论】:

          【解决方案6】:

          我在另一个问题上发布了this answer,但它也可能对您有所帮助。

          类:

          import android.os.Handler;
          import android.os.Looper;
          
          public class Waiter {
          
          WaitListener waitListener;
          int waitTime = 0;
          Handler handler;
          int waitStep = 1000;
          int maxWaitTime = 5000;
          boolean condition = false;
          
          public Waiter(Looper looper, final int waitStep, final int maxWaitTime){
          
              handler = new Handler(looper);
              this.waitStep = waitStep;
              this.maxWaitTime = maxWaitTime;
          
          }
          
          public void start(){
          
              handler.post(new Runnable() {
                  @Override
                  public void run() {
          
                      waitListener.checkCondition();
          
                      if (condition) {
          
                          waitListener.onConditionSuccess();
          
                      } else {
                          if (waitTime <= maxWaitTime) {
          
                              waitTime += waitStep;
                              handler.postDelayed(this, waitStep);
          
                          } else {
          
                              waitListener.onWaitEnd();
                          }
                      }
                  }
              });
          
          }
          
          public void setConditionState(boolean condition){
              this.condition = condition;
          }
          
          public void setWaitListener(WaitListener waitListener){
              this.waitListener = waitListener;
          }
          
          }
          

          界面:

          public interface WaitListener {
          
          public void checkCondition();
          
          public void onWaitEnd();
          
          public void onConditionSuccess();
          
          }
          

          使用示例:

          ConnectivityManager mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
          final int result = mConnMgr.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableMMS");
          
          final Waiter waiter = new Waiter(getMainLooper(), 1000, 5000);
          waiter.setWaitListener(new WaitListener() {
          
                      @Override
                      public void checkCondition() {
                          Log.i("Connection", "Checking connection...");
                          NetworkInfo networkInfo = mConnMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS);
                          waiter.setConditionState(networkInfo.isConnected());
                      }
          
                      @Override
                      public void onWaitEnd() {
                          Log.i("Connection", "No connection for sending");
                          //DO
                      }
          
                      @Override
                      public void onConditionSuccess() {
                          Log.i("Connection", "Connection success, sending...");
                          //DO
                      }
          
          });
          
          waiter.start();
          

          【讨论】:

          • 您应该真正将链接答案的相关部分包含在您自己的内容中,除非它更适合作为评论。
          【解决方案7】:

          您可以使用 java 处理程序来完成您的任务:

          Handler handler = new Handler();
          handler.postDelayed(new Runnable() {
              public void run() {
               // Actions to do after 5 seconds
              }
          }, 5000);
          

          更多信息请阅读以下网址:

          https://developer.android.com/reference/android/os/Handler.html

          【讨论】:

            【解决方案8】:

            看看这是否适合你。一定要导入android.os.Handler

                  Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            public void run() {
                                // yourMethod();
                            }
                        }, 5000);   //5 seconds
            

            【讨论】:

            • 它给出了一个错误,说 Handler is an Abstract cannot be instantiated
            • 我认为这是我的错误,我明天会重新检查一遍
            • 使用这个处理程序android.os.Handler。您正在使用日志记录处理程序,而该处理程序没有 postDelay 方法。您还会收到未启动的错误,因为您必须对其实施一些方法,因为您正在使用 Logging 处理程序
            • 这个应该是答案。
            猜你喜欢
            • 2016-05-05
            • 2010-12-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-22
            • 1970-01-01
            • 2012-12-23
            • 1970-01-01
            相关资源
            最近更新 更多