Wie kann eine Android-Anwendung auf kritische Änderungen in der Umgebung reagieren?

Angenommen, es gibt eine Anwendung, die ein Konto in AccountManager erstellt. Benutzer erforscht die ziemlich komplizierte Aktivität Diagramm dieser Anwendung für eine Weile, dann geht zu Accounts and Sync in Android-Einstellungen, entfernt das Konto und Zeichen in (immer noch in Accounts and Sync als ein anderer Benutzer.

Ich habe einen Empfänger für LOGIN_ACCOUNTS_CHANGED ausgestrahlt und ich kann alle Dienste anmutig abschalten. Aber die Aktivitäten sind immer noch da und tragen den Namen des ersten Benutzers in ihrem Header (UI wird in einer Reihe von Möglichkeiten durcheinander gebracht, aber dieser ist am offensichtlichsten).

  • Verstecken / zeigen fab mit Skala Animation
  • Wie deaktiviere ich das Recycler-View-Scrollen so, dass es das Scrollview-Layout hört?
  • Wie zu überprüfen derzeit Internet-Verbindung ist verfügbar oder nicht in Android
  • Android: Stoppen / Starten des Dienstes je nach WiFi-Status?
  • So ändern Sie einen TextView Text durch Drücken einer Schaltfläche
  • Wie importiere ich Remote-Bibliothek in Android Studio mit gradle?
  • Also, die Frage ist: Was sollte man mit diesen Waisen Aktivitäten machen?

    • Ich könnte so etwas wie clearTaskOnLaunch , aber alle Aktivitäten sind im Hintergrund, wenn die Änderung stattfindet.
    • Setzen Sie eine Markierung in SharedPreferences und überprüfen Sie onResume() jeder Aktivität, und starten Sie die clearTask Aktivität, falls erforderlich? Zu unordentlich.
    • Die beste Option, die ich in der Lage war zu kommen, ist, android.os.Process.killProcess(android.os.Process.myPid()) zu verwenden, um alle Aktivitäten zu töten. Das ist nicht zu anmutig, aber er wird Job gemacht. Die einzige Nebenwirkung ist, dass der Aktivitätsstapel noch da ist, wenn das vernünftigste zu sein scheint, von der LAUNCHER Aktivität zu beginnen, mit klarer Geschichte.

    Also, was wäre der beste Weg, um auf das beschriebene Szenario zu reagieren?

  • CPU-Nutzung pro Anwendung in Android
  • Aktiviere die Unterstützung von C ++ 11 auf Android
  • Android Custom URL Scheme weigert sich zu arbeiten / wie man zurück zu Android App nach OAuth navigieren
  • Gibt es ein Repo, wo man Android virtuelle Geräte herunterladen kann?
  • Force Update Android App, wenn neue Version zur Verfügung
  • Android: PhoneGap vs Webview
  • 2 Solutions collect form web for “Wie kann eine Android-Anwendung auf kritische Änderungen in der Umgebung reagieren?”

    Haben Sie alle Ihre Aktivitäten von einer MyActivity Klasse, die ein BroadcastReceiver Mitglied hat: mChangeReceiver.

    Haben Sie MyActivity registrieren mChangeReceiver in onCreate (und unregister in onDestroy ), um die LOGIN_ACCOUNTS_CHANGED Absicht.

    Habe die mChangeReceiver eine abstrakte Methode onAccountChanged() , die alle erweiterten Klassen überschreiben und implementieren müssen, um die Änderung in der GUI onAccountChanged() .

    Das ist es. Nun, wann immer sich das Konto ändert, werden alle Ihre lebenden Aktivitäten ihre onAccountChanged Methode aufgerufen und wird ihre GUI onAccountChanged .

    Ich habe einige Ideen auf der Grundlage der Tatsache, dass Sie Benutzer-Login-Mechanismus:

    Über UI, wie wäre es mit der Aktualisierung der Benutzernamen UI (wahrscheinlich Textansicht) auf onPause zu "" und Aktualisierung auf den aktuellen Benutzer auf onResume?

    Über die Schließung von Aktivitäten, wenn nötig, können Sie den aktuellen Benutzer zu einer globalen Variablen und pro Aktivität speichern. Jede Aktivität sollte überprüfen, ob die globale die gleiche ist wie die, die sie zuletzt gespeichert haben, wenn sie aktualisiert wurden. Wenn sie anders sind, können Sie die Aktivität schließen. Du könntest auch die ClearTask-Flagge verwenden, wie du geschrieben hast.

    Ein weiterer Weg, um die Aktivitäten zu behandeln ist durch die Verwendung von Fragment Stack statt. Für weitere Informationen überprüfen Sie die Android-Support-Beispiele für Fragment Stack.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.