2012-04-20 3 views
10

Digamos que hay una aplicación que crea una cuenta en AccountManager. Usuario explora el gráfico de actividad bastante complicado de esta aplicación por un tiempo, luego se va a Accounts and Sync en la configuración de Android, elimina la cuenta y de los signos en (todavía estar en Accounts and Sync como un usuario diferente.¿Cómo debería responder una aplicación de Android a cambios críticos en el entorno?

he definido un receptor para LOGIN_ACCOUNTS_CHANGED emisión y puedo cerrar todos los servicios con gracia, pero las actividades siguen ahí, con el nombre del primer usuario en su encabezado (la interfaz de usuario se arruina de varias maneras, pero esta es la más obvia).

Entonces, la pregunta es: ¿qué se debe hacer con estas actividades huérfanas?

  • Podría usar algo como clearTaskOnLaunch, pero todas las actividades están en segundo plano cuando ocurre el cambio.
  • Establezca un indicador en SharedPreferences y controle en onResume() de cada actividad, luego inicie la actividad clearTask si es necesario. Muy desordenado.
  • La mejor opción que pude encontrar es usar android.os.Process.killProcess(android.os.Process.myPid()) para matar todas las actividades. Esto no es muy elegante, pero hace un trabajo. El único efecto secundario es que la pila de actividades todavía está allí, cuando lo más razonable parece ser comenzar desde la actividad LAUNCHER, con un historial claro.

Entonces, ¿cuál sería la mejor manera de responder al escenario descrito?

+1

El uso de Process.killProcess() siempre es un truco, nunca la solución correcta. – hackbod

+0

Estoy de acuerdo, de ahí la pregunta. – Ash

Respuesta

5

Tienen todas sus actividades se extienden de una clase MyActivity que tiene un miembro BroadcastReceiver: mChangeReceiver.

Tener MyActivity mChangeReceiver registro en onCreate (y anular el registro en onDestroy), con la intención LOGIN_ACCOUNTS_CHANGED.

Solicite al mChangeReceiver que llame a un método abstracto onAccountChanged() que todas las clases ampliadas deben sobrescribir e implementar para reflejar el cambio en la GUI.

Eso es todo. Ahora, cada vez que cambie la cuenta, todas sus actividades de vida recibirán su método onAccountChanged y actualizarán su GUI.

+2

Gracias por la idea, podría funcionar.Aunque estaba buscando una solución que reiniciara la aplicación de una forma u otra, porque mostrar una pila de actividad de un usuario al otro no parece una buena idea. Intentaré llamar a 'finish()' y veré cómo funciona. – Ash

0

tengo algunas ideas basadas en el hecho de que tiene mecanismo de usuarios-entrada:

sobre la interfaz de usuario, ¿qué hay de la actualización de la interfaz de usuario Nombre de usuario (probablemente TextView) sobre onPause en "" y su actualización al usuario actual al onResume ?

sobre las actividades de cierre, si es necesario, puede guardar el usuario actual en una variable global y por actividad. cada actividad debería verificar si la global es la misma que la última vez que se actualizaron. si son diferentes, puede cerrar la actividad. también puedes usar el flag clearTask como lo has escrito.

Otra forma de manejar las actividades es mediante el uso de la pila de fragmentos en su lugar. para obtener más información, consulte los ejemplos de soporte de Android de la pila de fragmentos.

Cuestiones relacionadas