Ich habe einen IntentService, der Webservice-Aufrufe in die Warteschlange stellt, die an meinen Webserver gesendet werden müssen. So ist jeder Intent ein Webservice-Aufruf, der gemacht werden muss.
Ich möchte etwas einrichten, wo meine Anwendung diesen IntentService fragen kann, wenn sie Intents enthält, die ein bestimmtes Datenelement enthalten (IE: "Warten Sie schon darauf, die Cloud nach x-Daten zu fragen? Oder muss ich das tun? sag es dir, es zu tun? ").
Gibt es irgendwelche Vorschläge, wie ich IntentService dazu erweitern könnte? Kann die Intent-Queue eines IntentService durchlaufen werden? Oder müsste ich den IntentService-Code nehmen und ändern?
Die einzige andere Idee, die ich habe, besteht darin, der Datenbank eine Tabelle hinzuzufügen und zu protokollieren, welche Aufrufe in der Warteschlange sind, wobei jedes Protokoll nach Beendigung aus der Tabelle entfernt wird.
Gibt es irgendwelche Vorschläge, wie ich IntentService dazu erweitern könnte? Kann die Intent-Queue eines IntentService durchlaufen werden? Oder müsste ich den IntentService-Code nehmen und ändern?
Wahrscheinlich letzteres, wenn Sie die aktuelle Warteschlange wirklich untersuchen möchten. IntentService
wandelt die Intents
in Nachrichten um, die in der Nachrichtenwarteschlange von Looper
über eine HandlerThread
angezeigt werden. Nichts davon wird jedoch über das SDK bereitgestellt. Glücklicherweise ist IntentService
ziemlich kurz - nicht einmal 150 Zeilen. Sie könnten es in Ihr eigenes Paket klonen und nach Bedarf Änderungen vornehmen. Führen Sie einfach ein Diff auf der Quelle aus, wenn neue Quellupdates im AOSP-Repository veröffentlicht werden, damit Sie wissen, ob Google eine größere Operation an IntentService
selbst durchgeführt hat, von der Sie möglicherweise profitieren möchten.
Die einzige andere Idee, die ich habe, ist, eine Tabelle zur Datenbank hinzuzufügen und zu protokollieren, welche Aufrufe in der Warteschlange sind, wobei jedes Protokoll nach Beendigung aus der Tabelle entfernt wird.
Es müsste nicht einmal so persistent sein, da die eigene Warteschlange von IntentService
nicht persistent ist. Behalte einfach deine eigene FIFO-Warteschlange in onStartCommand()
, kettet an die Oberklasse und platziere deine Intent
aus der Warteschlange am Ende von onHandleIntent()
. Dies kann dazu führen, dass die Synchronisierung mit der Masterwarteschlange fehlschlägt (z. B. möchten Sie finally
verwenden, um sicherzustellen, dass Sie die Arbeit aus Ihrer eigenen Warteschlange löschen), aber Sie müssen die Klasse nicht klonen.
Tags und Links android intentservice android-intentservice