Android der Unterschied zwischen onHandleIntent und onStartCommand

8

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 :

%Vor%     
Chromium 07.01.2016, 02:59
quelle

3 Antworten

24

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, die null zurückgibt.
  •   
  • Stellt eine Standardimplementierung von onStartCommand() bereit, die die Absicht an die Arbeitswarteschlange und dann an Ihre onHandleIntent() 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 .

    
Mauker 07.01.2016, 03:19
quelle
3

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 stattdessen onHandleIntent(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.

    
Roshan 07.01.2016 03:26
quelle
1

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.

    
activedecay 07.01.2016 03:36
quelle