Mit Hintergrund meine ich, dass keine der Aktivitäten der Anwendung derzeit für den Benutzer sichtbar sind?
Antworten
Zu viele Anzeigen?Für eine Antwort ist es vielleicht zu spät, aber falls jemand zu Besuch kommt, schlage ich hier die Lösung vor, Es gibt viele Gründe, warum eine Anwendung wissen will, ob sie im Hintergrund ist oder in den Vordergrund kommt, einige davon sind 1. Um Toasts und Benachrichtigungen anzuzeigen, wenn der Benutzer in BG ist. 2. um einige Aufgaben auszuführen, wenn der Benutzer zum ersten Mal aus dem Hintergrund kommt, wie z. B. eine Umfrage, eine Neuberechnung usw.
Die Lösung von Idolon und anderen befasst sich mit dem ersten Teil, nicht aber mit dem zweiten. Wenn es in Ihrer Anwendung mehrere Aktivitäten gibt und der Benutzer zwischen ihnen wechselt, ist das Sichtbarkeitskennzeichen falsch, wenn Sie in der zweiten Aktivität sind. Es kann also nicht deterministisch verwendet werden.
Ich habe etwas getan, was von CommonsWare vorgeschlagen wurde: "Wenn der Dienst feststellt, dass keine Aktivitäten sichtbar sind, und so bleibt es auch für eine gewisse Zeit Halten Sie die Datenübertragung am nächsten logischen Haltepunkt an.
Die fettgedruckte Zeile ist wichtig und kann für den zweiten Punkt verwendet werden. Also, was ich tue, ist, sobald ich die onActivityPaused(), nicht ändern Sie die sichtbar auf false direkt, stattdessen haben einen Timer von 3 Sekunden (das ist die maximale, dass die nächste Aktivität gestartet werden sollte), und wenn es nicht onActivityResumed() Aufruf in den nächsten 3 Sekunden, ändern sichtbar auf false. Ähnlich in onActivityResumed(), wenn es einen Timer gibt, dann breche ich ihn ab. Zusammenfassend lässt sich sagen, dass visible zu isAppInBackground wird.
Leider kann ich den Code nicht einfügen...
In meinen Aktivitäten onResume und onPause schreibe ich einen isVisible Boolean zu SharedPrefences.
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
Editor editor = sharedPrefs.edit();
editor.putBoolean("visible", false);
editor.commit();
Und lesen Sie es bei Bedarf woanders nach,
// Show a Toast Notification if App is not visible (ie in background. Not running, etc)
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
if(!sharedPrefs.getBoolean("visible", true)){...}
Vielleicht nicht elegant, aber für mich funktioniert es...
Ich möchte Ihnen empfehlen, dies auf andere Weise zu tun.
Ich vermute, Sie möchten den Startbildschirm anzeigen, während das Programm gestartet wird, wenn es bereits im Backend läuft, zeigen Sie ihn nicht an.
Ihre Anwendung kann die aktuelle Zeit kontinuierlich in eine bestimmte Datei schreiben. Prüfen Sie beim Starten Ihrer Anwendung den letzten Zeitstempel. Wenn current_time-last_time größer ist als die Zeitspanne, die Sie für das Schreiben der letzten Zeit angegeben haben, bedeutet dies, dass Ihre Anwendung angehalten wurde, entweder vom System oder vom Benutzer selbst beendet.
- See previous answers
- Weitere Antworten anzeigen