Функция Android Sleep/Wait/Delay
прежде всего, я начинающий в мире андроидов, поэтому, пожалуйста, извини меня, если это глупый вопрос..
Я пытаюсь сделать следующее:
- Включить мобильные данные
- Подождите 10 секунд
- а. проверьте, получил ли мобильный 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 секунд он проверяет, доступен ли интернет, если он не отключится.