Android睡眠/等待/延迟功能

时间:2014-01-27 12:29:55

标签: android delay sleep thread-sleep

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

我正在尝试做以下事情:

  1. 启用移动数据
  2. 等待10秒
  3. 一个。检查手机是否有IP地址(数据连接成功)
    湾如果未连接,则禁用数据
    C。转到步骤1
  4. 这些步骤1到3将在For循环中执行用户给定的重试次数。

    现在我的问题是:我被困在第2步。
    我无法使waitfor(int seconds)功能。我尝试使用Runnable PostDelayed方法,但它没有给我所需的输出。

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

    我尝试将isDataAvailable = GetInternetAvailibility()语句放入postDelayed处理程序中,但导致enableInternet() disableInternet()同时执行,而isDataAvailable = GetInternetAvailibility()执行后enableInternet()执行延迟。

    我可以从日志中看到UserChoice执行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); } }); } 次,没有任何延迟。

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

    编辑:让我说清楚:

    {{1}}

    现在每当我点击按钮时,我都会在日志中看到System.out将消息打印为:



    前后

    前后

    后 XXX
    XXX
    XXX

    但我想:

    前 XXX
    之后,

    前 XXX
    之后,

    前 XXX
    后。

4 个答案:

答案 0 :(得分:28)

试试这个:

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

答案 1 :(得分: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();

答案 2 :(得分:1)

尝试下面的代码。希望它能提供帮助

int i = 0;
int j = 3;

method() {
    if (i < j) {
        System.out.println("Before..");
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                System.out.println("XXXXXX");

                i++;
                System.out.println("after");
                method();
            }
        }, 1000);
    }

}

答案 3 :(得分:0)

  

我试着把isDataAvailable = GetInternetAvailibility()语句   在postDelayed处理程序,但它导致enableInternet()   disableInternet()在isDataAvailable =的同时执行   GetInternetAvailibility()在延迟后执行。

在postDelayed中放入if语句和disableInternet()。 enableInternet将被调用,10秒后它将检查互联网是否可用,如果没有,它将禁用互联网。