it-swarm.com.de

Android Sleep/Wait/Delay-Funktion

zuallererst bin ich ein Anfänger in der Android-Welt, also entschuldige mich bitte, wenn es dumme Frage ist.

Ich versuche folgendes zu tun:

  1. Mobile Daten aktivieren
  2. Warten Sie 10 Sekunden
  3. ein. Prüfen Sie, ob Mobile eine IP-Adresse erhalten hat (Daten wurden erfolgreich verbunden).
    b. Wenn keine Verbindung besteht, deaktivieren Sie Daten
    c. Weiter mit Schritt 1

Diese Schritte 1 bis 3 werden in For-Schleife für die Anzahl der Wiederholungen von Benutzer ausgeführt.

Jetzt ist mein Problem: Ich stehe bei Schritt Nr. 2 fest.
Ich kann keine waitfor(int seconds)-Funktion erstellen. Ich habe versucht, die Runnable PostDelayed-Methode zu verwenden, aber sie liefert mir keine Ausgabe.

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

Ich habe versucht, die isDataAvailable = GetInternetAvailibility()-Anweisung in postDelayed des Handlers zu setzen, aber es bewirkt, dass enableInternet()disableInternet() gleichzeitig ausgeführt wird, während isDataAvailable = GetInternetAvailibility() nach einer Verzögerung ausgeführt wird.

Aus Protokollen kann ich ersehen, dass enableInternet() für UserChoice mehrere Male ohne Verzögerung ausgeführt wird.

Thread.sleep (10000) friert die Benutzeroberfläche für 10 Sekunden ein ... Wie erreiche ich das?

EDIT: Lassen Sie mich klarstellen:

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

Immer wenn ich auf die Schaltfläche klicke, die in Protokollen angezeigt wird, druckt System.out die Nachricht als:

Vor
nach dem
Vor
nach dem
Vor
nach dem
XXX
XXX
XXX

Aber ich möchte:
Vor
XXX
Nach dem.
Vor
XXX
Nach dem.
Vor
XXX
Nach dem.

13
ShitalSavekar

versuche dies:

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

Dieser Weg kann Ihnen helfen. 

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

Versuchen Sie unter dem folgenden Code. Hoffe, dass es helfen wird

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

}
1
suresh

Ich habe versucht, die Anweisung isDataAvailable = GetInternetAvailibility () zu setzen in postDelayed des Handlers, verursacht jedoch enableInternet () disableInternet () soll gleichzeitig ausgeführt werden, während isDataAvailable = .__ ist. GetInternetAvailibility () wird nach einer Verzögerung ausgeführt.

Setzen Sie die if-Anweisung und disableInternet () in postDelayed. enableInternet wird angerufen, 10 Sekunden später wird geprüft, ob das Internet verfügbar ist. Andernfalls wird Internet deaktiviert.

0
FunkTheMonk