Вопрос по thread-sleep, sleep, delay, android – Функция Android Sleep / Wait / Delay

13

во-первых, яЯ новичок в мире Android, поэтому, пожалуйста, извините меня, если это глупый вопрос .. Я '

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

Включить мобильные данные

Подождите 10 секунд

а. проверьте, есть ли у Mobile 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 секунд ... Как мне этого добиться?

РЕДАКТИРОВАТЬ: Позвольте мне очистить:

public void onClick(View v) {
     // Perform action on click
    for(i=0; i
Хорошо, если sleep () замораживает ваш пользовательский интерфейс, кажется, что ваш код работает на "главный" нить. Попробуйте запустить код в другом потоке. webuster

Ваш Ответ

4   ответа
0

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

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

Я тоже это пытался .. но из-за цикла, enableInternet () заставляет выполнить скажем 5 раз одновременно. и затем операторы postDelayd входят в картину, когда цикл for завершил свою обработку. ShitalSavekar
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);
    }

}
Привет Суреш, спасибо за точный код. Но я должен отдать должное Випуту, поскольку он пришел с той же логикой в первую очередь .. Но спасибо за это .. Хорошо объяснил брат! ShitalSavekar
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);
        }
    }
}
Я не'Я не пробовал, но выглядит многообещающе :-)попробую и дам тебе знать .. ShitalSavekar
этот код можно использовать по-разному. Я'Я использовал его, чтобы перейти к историям после в моем приложении, похожем на Instagram. Благодарю вас Jay
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();

Похожие вопросы