Datenänderung in IntentService

9

Ich verwende IntentService für den Umgang mit meinen Nachrichten aus der Push-Benachrichtigung von FCM. Es funktioniert perfekt wie erforderlich, wenn die Nachricht nacheinander kommt, aber wenn das Gerät nicht mit dem Netzwerk verbunden ist und wenn das Gerät wieder verbunden ist, sendet FCM den Großteil der Nachrichten gleichzeitig und verursacht bei diesem Szenario einige mehrdeutige Daten, die Daten verarbeiten verursacht unerwartetes Verhalten beim Aufrufen von Webdiensten.

Mein Push-Notification-Handler Klasse:

%Vor%

Und meine Benachrichtigungshandler-Serviceklasse:

%Vor%

Im Falle von Bulk-Push-Nachrichten bekomme ich den austauschbaren Wert von NOTIFICATION_DATA, dh der Wert, den ich erwarte, wenn das Benachrichtigungsfeld "NOTIFICATION_FIELD_CACHEHOMEFEEDS" ist "post: 1234" und für das Feld "NOTIFICATION_FIELD_ARTICLES" ist "post : 'post-URL' "aber ich erhalte" post: 1234 "für das Feld" NOTIFICATION_FIELD_ARTICLES ", der Wert kann in jeder Reihenfolge ausgetauscht werden, abhängig vom Nachrichtenaufruf der Push-Benachrichtigung.

Gemäß der Dokumentation von IntentService werden die Anfragen nacheinander in der Warteschlange behandelt. Warum passiert das? Ist eine Methode, um dies perfekt zu handhaben.

    
sasuke 28.08.2017, 13:27
quelle

1 Antwort

2

IntentService - & gt; onHandleIntent wird in einem Hintergrundthread ausgeführt. Wenn Sie zeitaufwändig sind, sollten Sie es dort ausführen. Wenn nicht - benutze den normalen Service.

Jetzt in onHandleIntent injizierst du den Moderator mehrmals aus dem Hintergrundthread - ich denke, du solltest die Injektion in den Konstruktor verschieben. Dann rufen Sie in onHandleIntent Ihre Presenter-Methoden auf (mPresenter.prefetchData, mPresenter.getPostDetailById usw.).

    
yorgo333 28.09.2017 09:11
quelle

Tags und Links