Comment une application Android doit-elle répondre à des changements critiques dans l'environnement?

Disons qu'il y a une application qui crée un compte dans AccountManager. L'utilisateur explore le graphe d'activité assez complexe de cette application pendant un certain temps, puis accède aux Accounts and Sync dans les paramètres Android, supprime le compte et signe (toujours dans Accounts and Sync tant qu'utilisateur différent.

J'ai défini un récepteur pour la diffusion de LOGIN_ACCOUNTS_CHANGED et je peux fermer tous les services avec gratitude. Mais les activités sont encore là, portant le nom du premier utilisateur dans leur en-tête (UI se déforme de plusieurs façons, mais celle-ci est la plus évidente).

  • Impossible de trouver la propriété 'outputFile' sur com.android.build.gradle.internal.api.ApplicationVariantImpl
  • App Crash instantanément sans exception ou log (semble comme xamarin / mono bug)
  • Réglage ISO de l'appareil photo / vitesse d'obturation
  • Vue OpenGL dans une mise en page
  • NotifyDataSetChanged pour plusieurs cases à cocher
  • Quelles devraient être les raisons d'utiliser OpenSL ES au lieu de AudioTrack dans Android?
  • La question est donc: que faut-il faire de ces activités orphelines?

    • Je pourrais utiliser quelque chose comme clearTaskOnLaunch , mais toutes les activités sont en arrière-plan lorsque la modification se produit.
    • Définissez un drapeau dans SharedPreferences et vérifiez onResume() de chaque activité, puis lancer clearTask activité clearTask si nécessaire? Trop bordélique.
    • La meilleure option que j'ai pu proposer consiste à utiliser android.os.Process.killProcess(android.os.Process.myPid()) pour tuer toutes les activités. Ce n'est pas trop gracieux, mais il fait du travail. Le seul effet secondaire est que la pile d'activité est toujours là, lorsque la chose la plus raisonnable semble être de commencer par l'activité LAUNCHER , avec un historique clair.

    Alors, quelle serait la meilleure façon de répondre au scénario décrit?

    2 Solutions collect form web for “Comment une application Android doit-elle répondre à des changements critiques dans l'environnement?”

    Toutes vos activités s'étendent à partir d'une classe MyActivity qui possède un membre BroadcastReceiver : mChangeReceiver.

    Have MyActivity enregistre mChangeReceiver dans onCreate (et enregistrez-vous dans onDestroy ), à l'intention LOGIN_ACCOUNTS_CHANGED .

    Demandez à mChangeReceiver d'appeler une méthode abstraite onAccountChanged() que toutes les classes onAccountChanged() et implémentées pour refléter la modification de l'interface graphique.

    C'est tout. Maintenant, chaque fois que le compte change, toutes vos activités vivantes recevront leur méthode onAccountChanged appelée et actualiseront leur GUI.

    J'ai quelques idées basées sur le fait que vous avez un mécanisme de connexion aux utilisateurs:

    À propos de l'interface utilisateur, que diriez-vous de mettre à jour l'UI du nom d'utilisateur (probablement la vision du texte) sur onPause pour "" et la mettre à jour sur l'utilisateur actuel sur onResume?

    Sur les activités de fermeture si nécessaire, vous pouvez enregistrer l'utilisateur actuel sur une variable globale et par activité. Chaque activité devrait vérifier si le global est identique à celui qu'ils ont stocké la dernière fois qu'ils ont été mis à jour. S'ils sont différents, vous pouvez fermer l'activité. Vous pouvez également utiliser le drapeau clearTask comme vous l'avez écrit.

    Une autre façon de gérer les activités est en utilisant des fragments à la place. Pour plus d'informations, vérifiez les exemples de support de l'android de la pile de fragments.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.