Wie eine Absicht zu verwenden, um eine Aktivität zu aktualisieren?
-
19-09-2019 - |
Frage
ich eine Dienstleistung, die eine Datei heruntergeladen wird. Wenn der Download fertig ist, würde Ich mag meine „Heruntergeladene Dateien“ -Liste in meinem Activity
aktualisieren, aber nur, wenn der Activity
läuft. Ich will nicht die Activity
zu starten, wenn es nicht bereits ausgeführt wird.
Ich hatte gehofft, ich könnte dies tun, indem Sie einen neuen Intent
mit einigen speziellen Flagge zu machen.
Wer noch keine Ahnung, wie ich das erreichen kann? Ein winziges Codebeispiel vielleicht?
Lösung
Sie können neue BroadcastReceiver Instanz erstellen und etwas tun in dieser Richtung auf Ihrer Aktivität des onResume () Methode:
registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));
Danach wird außer Kraft gesetzt myReceiver der OnReceive () -Methode eine Funktion aufzurufen, dass Updates die Komponente, die Sie wollen:
@Override
public void onReceive(Context context, Intent intent) {
...
updateViewWithData(service.getNewFileData());
...
}
Auf Ihrer Aktivität des onPause () -Methode nur austragen Empfänger:
unregisterReceiver(myReceiver);
Ich hoffe, dass diese Ihnen helfen würde, zu fragen, fühlen Sie sich frei, wenn es etwas unklar ist.
Andere Tipps
Die gute Möglichkeit, dies zu tun, ist Ihre „Heruntergeladene Dateien“ Aktivität auf den Dienst zu binden. Wenn Sie den Dienst binden, in der Funktion onServiceConnected, registrieren Sie einen Rückruf Binder. Dann, wenn Sie neue Daten zur Verfügung haben, Service-Anrufe nur, dass Rückruf. Wenn die Aktivität nicht ausgeführt wird, wird die Rückrufliste auf der Serviceseite leer sein, so wird es nicht Ihre Aktivitäten informieren.
Ein Beispiel für diesen Ansatz, einen Blick auf RemoteService.java in Android SDK:
samples \ ApiDemos \ src \ com \ Beispiel \ android \ api \ app \