Ich verwende Service Android, der in android.app.Service definiert ist.
Ich rufe diesen Dienst (myService) von einer Aktivität.
MeinService ist:
%Vor%Die Methode checkDate () befindet sich in der Klasse myService.
Der Fehler ist:
%Vor% TimerTask
wird in einem separaten Thread ausgeführt. Toast.makeText()
muss von einem Thread ausgeführt werden, der ein Handler/Looper
eingerichtet hat. Das bedeutet im Wesentlichen, dass Sie den Toast auf einen Thread richten müssen, auf dem der Standard-Android-Nachrichten- / Event-Dispatcher läuft.
Der einfachste Weg dies zu tun wäre in Ihrer checkDate()
Methode:
EDIT: Ich bin ein Idiot, das ist nicht richtig. Sie können runOnUiThread () nicht aus einem Service-Kontext
aufrufenSie müssen hierfür einen Handler verwenden. In Ihrem Service:
%Vor% in onCreate()
Ihrer Dienstleistung:
in checkDate()
Methode:
Sie rufen es von einem Arbeitsthread an. Sie müssen Toast.makeText () (und die meisten anderen Funktionen, die die Benutzeroberfläche betreffen) innerhalb des Hauptthreads aufrufen. Sie könnten zum Beispiel einen Handler verwenden.
Sie müssen Toast.makeText (...) vom UI-Thread aus aufrufen:
%Vor%Tags und Links android multithreading android-service toast