Robospice - Behalte den Gewürzdienst beim Ändern der Aktivität weiter

8

Ich habe die RoboSpice -Bibliothek verwendet, um asynchrone Aufgaben auszuführen. Aus ihren Beispielen wird der Spice-Service in BaseActivity deklariert, er beginnt in der onStart-Methode der Aktivität und endet in onStop der Aktivität. Alles ist in Ordnung, aber wenn ich eine Datei aus dem Internet herunterladen möchte, und dann zu einer anderen Aktivität wechseln, wird diese Download-Aufgabe abgebrochen, weil der Gewürzdienst gestoppt wird. Es sieht so aus:

%Vor%

Ich frage mich also, ob es einen sicheren Weg gibt, die Download-Aufgabe weiterhin vom Spice-Dienst laufen zu lassen (diese Aufgabe berührt nicht die Benutzeroberfläche), und andere Aufgaben funktionieren normal (dh sie können abgebrochen werden, wenn sie gestoppt werden) respektiere den Aktivitätslebenszyklus.

    
R4j 08.11.2013, 15:20
quelle

2 Antworten

11

@ R4j, Sie haben den Punkt verpasst. Anforderungen werden nicht gestoppt, wenn die Aktivität, die den Spicemanager hält, angehalten wird. In RS haben Anfragen ihren eigenen Lebenszyklus und werden in einem anderen Kontext ausgeführt (ein Gewürzdienst, der ein Android Service ist).

Wenn also eine Anfrage ausgelöst wird, Ihre Aktivität stirbt oder getötet wird, geht die Gewürzanfrage auf ihren eigenen Weg und der Download wird fortgesetzt. Das Parsen wird ebenfalls durchgeführt und schließlich wird Ihr Ergebnis in den Cache gestellt. Falls vorhanden.

Wenn Sie also eine Anfrage in Aktivität A auslösen und das Ergebnis in Aktivität B bekommen wollen, sollten Sie:

  • führen Sie einfach die Anfrage in Aktivität A wie gewohnt aus, folgen Sie den RS-Beispielen
  • in B, nachdem Sie Ihren spiceManager (d. h. direkt nach super.onStart ()) gestartet haben, machen Sie 2 Dinge:

    • Verwenden Sie spiceManager.addListenerIfPending, um die neue Aktivität für eine ausstehende Anforderung zu kopieren
    • Verwenden Sie spiceManager.getDataFromCache, um Ergebnisse zu erhalten, die bereits durch eine vorherige Anfrage in den Cache gestellt werden konnten
  • optional, wenn Sie die Anfrage in B selbst erneut ausführen möchten, können Sie, und Sie werden froh zu lernen, dass wenn Sie die gleiche Anforderungsklasse mit dem gleichen Cache-Schlüssel verwenden, wird RS Ihre neue aggregieren Anfrage an eine ausstehende Anfrage für Sie.

In RS wird eine Anfrage durch einen zusammengesetzten Schlüssel identifiziert, der aus "Klasse des Ergebnisses einer Anfrage" + "Anfrage-Cache" besteht. Dieser zusammengesetzte Schlüssel kann verwendet werden, um eine ausstehende Anfrage sowie jedes Ergebnis, das von dieser Anfrage in den Cache gestellt wird, abzurufen.

    
Snicolas 12.11.2013, 06:08
quelle
2

Deklarieren Sie eine Spicemanager-Instanz in Ihrer Anwendungsklasse, und greifen Sie auf sie zu, um den Hintergrunddienst zu starten.

%Vor%

In Aktivität können Sie es aufrufen. Siehe meinen Code unten.

%Vor%     
Ahmad Raza 08.11.2013 15:47
quelle