2010-11-29 3 views
0

Ich muss eine Hilfsmethode schreiben, die ich an verschiedenen Stellen in der App verwenden kann, um es für N Millisekunden "schlafen zu lassen". Es sieht so aus als wäre Handler.postAtTime eine Möglichkeit, aber ich möchte alle Code-Snippets, falls verfügbar.Android 2.2: Wie können Sie eine Hilfsmethode schreiben, um Ihre App für N Millisekunden "schlafen zu lassen"?

+1

Ist es der Hauptthread der Anwendung, die für N Millisekunden in den Ruhezustand versetzt werden muss? Was meinst du damit, App zum Schlafen zu machen? –

+2

Sie sollten die App nicht in den Ruhezustand versetzen, insbesondere nicht in den Hauptthread der Benutzeroberfläche. Dies wirkt sich auf die Benutzeroberfläche aus und führt möglicherweise dazu, dass Ihre App träge aussieht. –

+0

Ich bin mit Suresh - wir brauchen mehr Informationen, um zu helfen. Das Verzögern der Operation X für Y ms wäre einfach, würde aber andere ui-Operationen und Hintergrundprozesse normal fortsetzen lassen. Alternativ können Sie schauen, ob Sie alle N ms überprüfen oder überprüfen, was auch machbar ist. Wir müssen nur mehr wissen. Wie ich unten zu Spencer sagte, sollten Sie Ihren Manin-Thread nicht schlafen legen, da dies die Android-Benutzeroberfläche im Wesentlichen einfrieren und Benutzer irritieren und möglicherweise FC-Warnungen verursachen wird. – Eddie

Antwort

1

Sind Sie auf der Suche nach so etwas?

try { 
    //Put the thread to sleep for the desired amount of time (milliseconds) 
    Thread.currentThread().sleep(1000); 
} 
catch(InterruptedException ie){ 

} 

Dadurch wird der Thread, den Sie aufrufen, für die angegebene Zeit in den Ruhezustand versetzt.

+2

Ich würde vor dieser Methode warnen. Das Android-Framework rät dringend davon ab, den UI-Thread jederzeit zu sperren, was im Wesentlichen dem entspricht, was Ihr Code tut. – Eddie

+0

+1 Eddie. Ja, man sollte niemals den Haupt-UI-Thread "schlafen"(). Das ist eine extrem schlechte Übung. –

+0

Auf der positiven Seite funktioniert das. Auf der Minus-Seite klingt es wie 'es gibt einen besseren Weg, lass es mich wissen. – charlest

5

Sie haben nicht gesagt, warum Sie Ihre App "schlafen" müssen.

Angenommen, Sie brauchen eine Aufgabe nach einiger Zeit laufen:

Handler h = new Handler(); 
h.postDelayed(new Runnable() { 
    public void run() { 
     // do something here 
    } 
}, 1000); // 1000 ms delay 
+0

Der Grund, warum ich dies tun muss, ist, dass ich eine Nachricht auf dem Bildschirm anzeigen lassen möchte, sie für 60 Sekunden anzeigen lassen und dann eine andere Nachricht anzeigen soll. Während der 60 Sekunden, die ich darauf warten muss, gibt es nichts Besonderes. Daher scheint AsyncTask nicht zu funktionieren. – charlest

+0

Schlafe (60000) in der asynctask? –

+0

Erstellen Sie nicht jedes Mal einen neuen Handler, wenn Sie eine Nachricht posten, aber abgesehen davon ist dies der gewünschte Ansatz. – adamp

2

Wenn Sie etwas dagegen, den Faden nicht zu blockieren, eine Alternative zu Thread.sleep() ist SystemClock.sleep().

Der Vorteil ist, dass es ein Einzeiler ist, da es die InterruptedException ignoriert, so dass Sie nicht damit umgehen müssen.

Weitere Informationen auf http://developer.android.com/reference/android/os/SystemClock.html.

Wie bereits erwähnt, sollten Sie fordern diese auf der Haupt UI-Thread vermeiden, wie es Ihre App nicht mehr reagiert verursacht zu werden und möglicherweise den gefürchteten Dialog zeigen alles, was wir hassen (warten oder in der Nähe bitte erzwingen.) Zu sehen

Verwandte Themen