Ich schreibe gerade ein Android-Programm, das ein IntentService
benötigt. Wenn ich den Code in die Funktion onHandleIntent
einfüge, wird der Code nicht ausgeführt, aber es werden keine Fehler in MainActivity
angezeigt. Aber wenn ich meinen Code in onStartCommand
kopiere, läuft er perfekt.
Das Problem ist, dass ich wissen möchte, was die Unterschiede zwischen onHandleIntent
und onStartCommand
sind. Danke.
CODE:
In onHandleIntent
:
Ab den Dokumenten :
Das IntentService
macht folgendes:
- Erstellt einen Standard-Worker-Thread, der alle Absichten ausführt, die an
onStartCommand()
getrennt vom Hauptthread Ihrer Anwendung übergeben wurden.- Erstellt eine Arbeitswarteschlange, die jeweils eine Absicht an Ihre
onHandleIntent()
-Implementierung weitergibt, sodass Sie sich keine Sorgen machen müssen Multithreading.- Stoppt den Dienst, nachdem alle Startanfragen bearbeitet wurden, sodass Sie nie
stopSelf()
aufrufen müssen.- Stellt die Standardimplementierung von
onBind()
bereit, dienull
zurückgibt.- Stellt eine Standardimplementierung von
onStartCommand()
bereit, die die Absicht an die Arbeitswarteschlange und dann an IhreonHandleIntent()
sendet Implementierung.
Und auch:
All dies summiert sich zu der Tatsache, dass alles, was Sie tun müssen, die Implementierung ist
onHandleIntent()
, um die vom Client geleistete Arbeit zu erledigen. (Obwohl du muss auch einen kleinen Konstruktor für den Dienst bereitstellen.)
Also ist ein IntentService
ein "Benutzerdefiniertes" Service
mit diesen speziellen Eigenschaften. Es ist also nicht notwendig, onStartCommand()
zu überschreiben, sollte das nicht tun , es sei denn, Sie verwenden die reguläre Klasse Service
.
Ein Beispiel für IntentService
usage:
Activity.java
%Vor%IhrIntentService.java
%Vor% Sie können auch dieses Lernprogramm oder dieses für weitere Informationen über Service
und IntentService
.
Überprüfen Sie auch die Dokumentation .
onStartCommand()
wird verwendet, wenn Sie Service
verwenden. onHandleIntent()
sollte stattdessen verwendet werden, wenn Sie IntentService
verwenden. IntentService
erweitert Service
. Und laut Dokumentation
"Sie sollten diese Methode (
onStartCommand
) für Ihre nicht überschreiben IntentService. Überschreiben Sie stattdessenonHandleIntent(Intent)
, was die Systemaufrufe, wenn der IntentService eine Startanforderung erhält. "
Wenn Sie onStartCommand()
außer Kraft gesetzt haben, wird Ihr onHandleIntent()
möglicherweise nicht aufgerufen.
Sie sollten onStartCommand()
für Ihre IntentService
nicht überschreiben.
Wenn Sie dies tun, vergewissern Sie sich, dass return super.onStartCommand();
lautet, weil das Intent
an die Arbeitswarteschlange und dann an Ihre onHandleIntent()
-Implementierung sendet.
Tags und Links android android-service intentservice