Android睡眠/等待/延迟功能

Shi*_*kar 15 android sleep delay thread-sleep

首先,我是android世界的初学者,如果这是一个愚蠢的问题,请向我道歉..

我正在尝试做以下事情:

  1. 启用移动数据
  2. 等待10秒钟
  3. 一个.检查手机是否有IP地址(数据连接成功)
    b.如果未连接,则禁用数据
    c.转到第1步

并且这些步骤1到3将在For循环中执行用户给定的重试次数.

现在我的问题是:我陷入第2步.
我无法发挥waitfor(int seconds)作用.我尝试使用Runnable PostDelayed方法,但它没有给我所需的输出.

for(retry = UserChoice; retry > 0 && !isDataAvailable ; retry -- ){
     enableInternet()
     delay(10)
     isDataAvailable = GetInternetAvailibility()
     if(!isDataAvailable){ 
         disableInternet()
     }
}
Run Code Online (Sandbox Code Playgroud)

我试图将isDataAvailable = GetInternetAvailibility()语句置于postDelayed处理程序中,但它导致在延迟后执行enableInternet() disableInternet()时同时isDataAvailable = GetInternetAvailibility()执行.

我可以从日志中看到,enableInternet()执行UserChoice的次数没有任何延迟.

Thread.sleep(10000)只是冻结用户界面10秒......我该如何实现这一目标?

编辑:让我说清楚:

public void onClick(View v) {
     // Perform action on click
    for(i=0; i<3; i++ ){
        System.out.println("Before..");
        delay(5);
        System.out.println("after..");
    }
}

public void delay(int seconds){
    milliseconds = seconds * 1000;
    runOnUiThread(new Runnable() {
             @Override
             public void run() {
                  final Handler handler = new Handler();
                  handler.postDelayed(new Runnable() {
                       @Override
                       public void run() {
                           System.out.println("XXX");                 //add your code here
                       }
                  }, milliseconds);
             }
      });
}
Run Code Online (Sandbox Code Playgroud)

现在,每当我点击按钮,我可以在System.out的打印消息日志中看到:

之前
之后
之前
之后
之前
之后
XXX
XXX
XXX

不过,我想:

XXX
后.

XXX
之后.

XXX
之后.

vip*_*tal 29

试试这个:

public void check() {
    isDataAvailable = GetInternetAvailibility()
    if (!isDataAvailable) {
        disableInternet();
        enableInternet();
        if (retry > 0) {
            retry--;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    check();
                }
            }, 10000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Xpl*_*ive 5

这种方式可以帮到你.

http://developer.android.com/reference/android/os/CountDownTimer.html

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
}.start();
Run Code Online (Sandbox Code Playgroud)