2016-07-25 6 views
0

In meiner App habe ich zwei Aktivitäten, A und B. A lädt einige Daten herunter und startet Aktivität B, wenn die Daten heruntergeladen werden - dies erfolgt über einen BroadcastReceiver, dessen onReceive()-Methode von B startet eine Absicht.So starten Sie keine Aktivität, wenn App im Hintergrund

Mein Problem ist, dass, wenn ich meine App in den Hintergrund geht, während die Daten noch heruntergeladen werden (zB starte ich meine App, dann schnell auf den "Home" Button, oder wechsle mit dem "Switch" Knopf), Sobald die Daten heruntergeladen sind, kommt meine App wieder in den Vordergrund ... nervig.

Bisher habe ich versucht, Flags und Maßnahmen auf die Absicht zu vermeiden, einschließlich intent.setAction(Intent.ACTION_SCREEN_ON), die in der Nähe der Antwort sein könnte: Es funktioniert gut auf einem Gerät mit API 16, aber nicht auf meiner, die API ausgeführt wird 22.

+1

Fügen Sie eine statische Variable hinzu, um zu halten, ob Boolean überprüft werden soll. wenn aktiv move intention wird sonst nicht angezeigt. dh MainActivit.isactive = false in onPause und MainActivit.isactive = true in onResume und check MainActivit.isactive in onRecue() – Muthu

Antwort

2

Normalerweise verwendet man einen Dienst, um Vorgänge im Hintergrund auszuführen. Dienste haben keine Benutzeroberfläche (aus offensichtlichen Gründen). Per Definition ist eine Aktivität eine Vordergrundaufgabe - das Verhalten, das Sie sehen, ist genau das, was passieren soll.

Ich würde dringend vorschlagen NICHT versuchen, eine Aktivität in einen Dienst zu verwandeln. Sie würden gegen den gesamten Anwendungslebenszyklus arbeiten, wenn Sie eine Funktion in Android verwenden könnten, die genau zu dem Zweck entwickelt wurde, den Sie suchen.

Hier ist eine schnelle Ressource, empfehle ich Ihnen mehr über Dienstleistungen lesen:

https://developer.android.com/training/best-background.html

Die BroadcastReceiver für einen Activity empfängt und verarbeitet Intent Objekte, auch wenn die App im Hintergrund, aber doesn‘ t zwinge deine App in den Vordergrund. Wenn Sie den Benutzer über ein Ereignis im Hintergrund benachrichtigen möchten, während Ihre App nicht sichtbar war, verwenden Sie Notification. Nie starten Sie eine Activity als Antwort auf eine eingehende Sendung Intent.

+0

In der Tat ... Ziemlich klar in den Best Practices: "** _ Nie _ ** starten eine' Aktivität' als Antwort zu einer eingehenden Sendung 'Intent'." – FlorianT