Frage

Ich habe einen Absichtserservice, der Webdienstanrufe anschließt, die an meinem Webserver getätigt werden müssen. Jede Absicht ist also ein Webdienstanruf, der getätigt werden muss.

Ich würde gerne etwas einrichten, wo meine Bewerbung diesen AbententService fragen kann, wenn es irgendwelche Absichten gibt, die ein bestimmtes Daten enthalten (dh: "Warten Sie bereits darauf, die Cloud nach X -Daten zu fragen? Oder muss ich Ihnen sagen, dass Tu es?").

Gibt es Vorschläge darüber, wie ich IntentService dazu verlängern könnte, dies zu tun? Kann die Intent -Warteschlange eines Inventservice durchquert werden? Oder müsste ich den Code für den Inspektservice nehmen und ihn ändern?

Die einzige andere Idee, die ich habe, besteht darin, der Datenbank und dem Protokoll eine Tabelle hinzuzufügen, die in der Warteschlange angezeigt wird, wobei jedes Protokoll nach Fertigstellung aus der Tabelle entfernt wird.

War es hilfreich?

Lösung

Gibt es Vorschläge darüber, wie ich IntentService dazu verlängern könnte, dies zu tun? Kann die Intent -Warteschlange eines Inventservice durchquert werden? Oder müsste ich den Code für den Inspektservice nehmen und ihn ändern?

Wahrscheinlich das letztere, wenn Sie wirklich die eigentliche Warteschlange untersuchen möchten. IntentService dreht die Intents in Nachrichten auf der Meldungswarteschlange von a aufgetaucht Looper über ein HandlerThread. Nichts davon wird jedoch durch das SDK freigelegt. Glücklicherweise, IntentService ist ziemlich kurz - nicht einmal 150 Zeilen. Sie können es in Ihr eigenes Paket klonen und nach Bedarf Änderungen vornehmen. Führen Sie einfach einen Diff der Quelle aus, wenn neue Quell -Updates im AOSP -Repository veröffentlicht werden. Sie wissen, dass Google eine größere Operation durch durchgeführt hat IntentService selbst, die Sie vielleicht ausnutzen möchten.

Die einzige andere Idee, die ich habe, besteht darin, der Datenbank und dem Protokoll eine Tabelle hinzuzufügen, die in der Warteschlange angezeigt wird, wobei jedes Protokoll nach Fertigstellung aus der Tabelle entfernt wird.

Es müsste nicht einmal so hartnäckig sein, da die IntentServiceDie eigene Warteschlange ist nicht hartnäckig. Pflegen Sie einfach Ihre eigene FIFO -Warteschlange in onStartCommand(), Ankettung an die Superklasse und das Knacken Intent aus der Warteschlange am Ende von onHandleIntent(). Dies hat die Chance, mit der Meisterwarteschlange zu synchronisieren (z. B. Sie möchten verwenden finally Um sicherzustellen, dass Sie die Arbeit aus Ihrer eigenen Warteschlange streichen), aber Sie müssten die Klasse nicht klonen.

Andere Tipps

Eine andere Lösung könnte darin bestehen, es durch Überschreibung auf StartCommand zu lösen.

Hier ist eine glatte Lösung, in der ich Inspiration für ein ähnliches Problem gefunden habe :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top