Was passiert, wenn meine Aktivität zerstört wird, wenn ich IntentService mit ResultReceiver verwende?

9

Ich habe das Netz durchsucht, um diese Antwort zu finden. Aber kein Ergebnis gefunden. Sorry, dass ich ein sehr Neuling in Java & amp; bin; Android-Programmierung.

Ich würde mehr auf meine Frage eingehen. Sagen wir, meine Aktivität hat einen IntentService gestartet und läuft im Hintergrund unabhängig. Der Dienst ist für den Rückruf von ResultReceiver "abonniert", um die Activity UI zu aktualisieren. Und während der Dienst den lang andauernden Prozess ausführt, wird die Aktivität zerstört. Was passiert also, wenn der Dienst über den ResultReceiver eine Antwort oder eine Fortschrittsaktualisierung an die Aktivität sendet?

Denn wie ich weiß, muss der ResultReceiver einen Verweis auf die Aktivität haben.

In meinem Projekt muss ich eine Videoclip-Messaging-App entwickeln. Wenn der Benutzer das Video erfasst hat, übergibt es die Daten an den Dienst und der Dienst führt das Hochladen sowie das Speichern einiger Informationen in db durch. Währenddessen wird die Fortschrittsaktualisierung über ResultReceiver auf der Activity UI veröffentlicht.

Der Benutzer kann die Aktivität nach Belieben beenden oder beenden. Aber wenn sie zum App / Activity zurück navigieren, muss der Upload / Download noch laufen, dann muss der aktuelle Fortschritt angezeigt werden.

Zunächst denke ich an Asynctask, aber es hat auch ähnliche Probleme, wie ich bereits erwähnt habe. Es benötigt eine Referenz der aufrufenden Aktivität.

Gibt es irgendwo, wo ich die von mir erwähnte Anforderung erfüllen kann? Entschuldigung für die lange Post. Hoffe jemand kann mich ein bisschen aufklären und es ist sogar besser, ein Code-Snippet zu haben. Vielen Dank:)

Bearbeiten: Kurz gesagt, gibt es eine Möglichkeit, eine neu erstellte Aktivität dynamisch an einen laufenden IntentService zu binden, damit der Dienst die Fortschrittsaktualisierung an die richtige Aktivität senden kann?

    
Ming Hong 06.01.2015, 09:54
quelle

1 Antwort

2

Verwenden Sie einen BroadcastReceiver für Ihre Aktivität und registrieren Sie sie in onResume() bzw. onPause() bzw. heben Sie ihre Registrierung auf. Sie können IntentFilter verwenden, um auf Intent von Ihrem IntentService zu warten.

Erstellen Sie in Ihrem IntentService einen Action-Wert für den IntentFilter und senden Sie einen Broadcast mit dieser Aktion, wenn Sie aktualisieren möchten:

%Vor%

In Ihrem Activity :

%Vor%     
jch000 04.01.2016 16:32
quelle