Ich versuche, den Status einer Benutzeroberfläche beim Empfang einer Push-Benachrichtigung zu aktualisieren. Um dies zu tun, muss ich eine AsyncTask
starten, die einige Netzwerkoperationen durchführt und dann die Benutzeroberfläche basierend auf dem Ergebnis aktualisiert.Verwenden eines BroadcastReceivers zum Starten einer AsyncTask
Gemäß der Dokumentation für BroadcastReceiver
ist die Ausführung von asynchronen Operationen in einem Empfänger unsicher, da der ausführende Prozess abgebrochen werden kann, sobald onReceive()
zurückgegeben wird, vorausgesetzt, es gibt keine anderen "Anwendungskomponenten" in diesem Prozess.
Wird die BroadcastReceiver
in einem eigenen Prozess ausgeführt, oder in demselben Prozess wie die enthaltene Aktivität? Da ich mich nur um den Abschluss der Aufgabe sorge, solange eine Benutzeroberfläche aktualisiert werden muss, mache ich mir keine Sorgen darüber, dass AsyncTask
stirbt, wenn die Aktivität geschlossen wird. Angenommen, der BroadcastReceiver befindet sich im selben Prozess wie die Aktivität, macht es also OK/sicher, die Aufgabe, die ich im Empfänger beschrieben habe, zu starten?
Edit:
Um zu klären, ich bin mit dem Empfänger in der Tätigkeit der Registrierung onResume()
und Deregistrierung es onPause()
, so sollte es nur Absichten werden empfangen, wenn die Aktivität bereits aktiv ist.
Warum nicht einen 'Service' anstelle von BroadcastReceiver verwenden, wenn es unsicher ist? Es würde dasselbe erreichen, aber ohne das Problem, von dem du sprichst. – Andy
@Andy Ich verstehe, dass die Verwendung eines "Service" unter allen Umständen sicher ist, aber ich versuche zu bestimmen, ob es in diesem speziellen Fall wirklich notwendig ist. – jnackman
Gut ist es, wenn Sie darüber nachdenken. Dienste sind perfekt zum Ausführen von asynchronen Operationen. Daher warum ist die gleiche Einschränkung nicht vorhanden. BroadcastReceiver werden hauptsächlich für andere Dinge verwendet, z. B. wenn etwas im System passiert, nicht wirklich, wenn Daten über das Internet aktualisiert werden. Daher "Broadcast". Während ein "Dienst" das ist, was er ist, läuft ein Dienst auf der Seite, über die der Benutzer nichts wissen muss. Hoffentlich macht das Sinn. – Andy