ich einen Thread in einer Android-Anwendung, die ich entweder an einem bestimmten Punkt in ihrem Betrieb warten möchte:Android - Thread warten Benachrichtigung oder Timeout * in Echtzeit machen *
- Eine Mitteilung von ein anderer Thread oder
- Ein Timeout auftreten, die ich in Echtzeit angeben möchte.
Derzeit habe ich (in etwa) folgende:
...
doStuff();
synchronized(this) {
if (!notificationReceived) wait(TIMEOUTPERIOD);
}
doMoreStuff();
...
und in einem Verfahren von einem anderen Thread aufgerufen:
synchronized(this) {
notificationReceived = true;
notifyAll();
}
Diese fast funktioniert. Tatsächlich funktionierte es bis zum Debuggen und Testen und funktionierte erst, als ich versuchte, die Anwendung im Feld bereitzustellen. Weil es sich herausstellt, dass der Timer in Object.wait() stoppt, wenn die Telefon-CPU in den Ruhezustand geht. Wie auch in Thread.sleep(). Hoppla.
Nun, es macht mir nichts aus, dass der Anruf nicht zurückkehrt, während das Telefon schläft (tatsächlich halte ich das für wünschenswert - die Ergebnisse der Aktion sind zu keinem Zeitpunkt erforderlich, wenn das Telefon schläft), Aber wenn das Telefon für die Dauer meiner Timeout-Zeit schläft, möchte ich, dass die Aktion ausgelöst wird, sobald sie aufwacht.
Gibt es irgendeine Möglichkeit, die ich vermisse, dies zu tun? Ich weiß, ich könnte AlarmManager verwenden, um mir eine Broadcast Intent nach der erforderlichen Zeit zu senden, und legte den Fortsetzungscode in einem (was ...? BroadcastReceiver? Ich habe das noch nie getan ...), aber das würde wesentlich komplizieren die Logik meiner Anwendung. Also: Gibt es einen einfacheren Weg, wie ich eine (kündbare) Echtzeitverzögerung in meinen Thread setzen kann?