Функция Android Sleep/Wait/Delay

прежде всего, я начинающий в мире андроидов, поэтому, пожалуйста, извини меня, если это глупый вопрос..

Я пытаюсь сделать следующее:

  1. Включить мобильные данные
  2. Подождите 10 секунд
  3. а. проверьте, получил ли мобильный IP-адрес (данные успешно подключены)
    б. если не подключено, отключить данные
    с. Перейдите к шагу 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()
     }
}

Я попытался поместить isDataAvailable = GetInternetAvailibility() в postDelayed обработчика, но он вызывает enableInternet() disableInternet() для выполнения одновременно, в то время как isDataAvailable = GetInternetAvailibility() запускается после задержки.

Я вижу из журналов, что enableInternet() выполняет для UserChoice количество раз без каких-либо задержек.

Thread.sleep(10000) просто замораживает пользовательский интерфейс в течение 10 секунд... Как мне это достичь?

EDIT: Позвольте мне понять:

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);
             }
      });
}

Теперь, когда я нажимаю кнопку, я могу видеть в журналах, что System.out печатает сообщение как:

До
после
До
после
До
после
XXX
XXX
XXX

Но я хочу:
До
XXX
После.
До
XXX
После.
До
XXX
После.

Ответы

Ответ 1

попробуй это:

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

Ответ 2

Этот способ может помочь вам.

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();

Ответ 3

Попробуйте приведенный ниже код. Надеюсь, что это поможет

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);
    }

}

Ответ 4

Я попытался поместить isDataAvailable = GetInternetAvailibility() в postDelayed обработчика, но он вызывает enableInternet() disableInternet() для выполнения одновременно, в то время как isDataAvailable = GetInternetAvailibility() запускается после задержки.

Поместите оператор if и отключитеInternet() в postDelayed. enableInternet вызывается, через 10 секунд он проверяет, доступен ли интернет, если он не отключится.