2011-05-06 7 views
6

Recientemente lancé mi primera aplicación para iPhone y parece que hay personas en la comunidad de Android que la solicitan ... así que comencé a desarrollar w/the SDK.Cómo administrar el estado de la aplicación en Android (para el desarrollador de iPhone)

Lo primero que noté es que en mi aplicación para iPhone almacenaba ciertas variables de sesión amplia en la aplicaciónDelegate. Como no tengo esta estructura en Android, tengo curiosidad por saber cómo los desarrolladores de Android realizan un seguimiento del estado de la aplicación en toda la aplicación (con suerte sin una tonelada de objetos singleton)

Si el enfoque de objeto singleton es cómo la mayoría de los desarrolladores Haga esto: ¿cómo puedo asegurar que la aplicación comienza en un estado limpio cada vez que el usuario hace clic en el botón "inicio" y vuelve a hacer clic en el icono (¿hay algo que pueda agregar a mi manifiesto para garantizar que no admita la multitarea de esta manera? ?)

Mi aplicación tiene un montón de estado específico sesión y para la primera iteración aún no apoyará multitarea :(

Respuesta

5

En primer lugar, la aplicación para Android puede consistir en múltiples actividades.

Si desea compartir el estado entre las actividades de uso Application clase: How to declare global variables in Android?

Si sólo tiene una actividad, a continuación, puede guardar el estado ahí.

Cuidado: cuando la actividad no está activa (su GUI no se muestra) no significa que se haya eliminado. Por lo tanto, si usa su aplicación y luego la cierra, abra otra aplicación, luego regrese a su aplicación, podría estar todavía "viva" (guardada en la memoria) y el estado se conservaría.

La mejor manera de manejar esto es enganchar en Activity lifecycle. Luego puede configurar/restablecer los datos a voluntad.

1

me parece Singleton ser la mejor manera de retener estado de la aplicación en Android aplicaciones. Puede escuchar cuando el usuario abandone la aplicación a través de los métodos onPause() y onStop() de la actividad actualmente enfocada, y haga lo que quiera con sus datos en ese momento. No es una buena práctica intentar anular la administración del ciclo de vida del SO de su aplicación (por ejemplo, tratar de matar su proceso cuando se presiona Atrás). Si desea que el estado de la aplicación se restablezca cada vez que el usuario abandona la aplicación (al presionar Inicio o al ser interrumpido con una llamada o notificación, o lo que sea), simplemente coloque todos sus datos de sesión en la Actividad misma. Cuando el usuario se vaya, se destruirá y volverá a crear cuando regrese el usuario.

Obviamente, hay detalles que desconozco de su aplicación, pero una vez que se familiarice con el ciclo de vida de cada pantalla (Actividad) y de la aplicación, podrá usar las devoluciones de llamada para administrar su estado como mejor le parezca

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

+0

¿Qué sucede si la aplicación tiene más de una actividad? –

+0

Una nota si decide almacenar datos en la Actividad como se sugiere aquí: Cambiar el modo de orientación o tener interrupciones emergentes que proporcionan algunas aplicaciones (por ejemplo, aplicaciones de SMS de vista rápida) también se detendrá y reiniciará la Actividad, que si los datos se almacenan solo en la memoria de la Actividad se restablecerá el estado. Entonces probablemente esa no sea la solución que desea en este caso. –

+0

Ese es un gran punto, se olvidó de eso. – LeffelMania

1

Si desea cerrar la aplicación cuando el usuario pulsa la tecla "Inicio", puede llamar acabado() en su método onPause.

ver este enlace: Killing android application on pause

+0

Puede guardar sus variables en un paquete para pasar entre estados. Consulte: http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state – Chris

+0

No debe cerrar su aplicación, ya que elimina todas las posibilidades de que Android administre los recursos limitados de su dispositivo. correctamente. Consulte http://stackoverflow.com/questions/2439978/why-dont-android-applications-provide-an-exit-option http://android-developers.blogspot.com/2010/04/multitasking-android-way. html http://blog.radioactiveyak.com/2010/05/when-to-include-exit-button-in-android.html - Si está "saliendo" de su aplicación, lo está haciendo mal. – RivieraKid

+0

Si un desarrollador se desvive por llamar a finish(), lo hacen por alguna razón, y estoy seguro de que entienden el impacto en la multitarea. No hay nada intrínsecamente incorrecto en llamarlo, después de todo, la llamada está ahí por una razón, ya que hay veces que se necesita. Nada en la programación es un todo. Lo peor que hará es aumentar ligeramente el tiempo de creación al tener que volver a cargar los recursos. El blog de Android Dev no dice que nunca lo use, solo que el sistema está diseñado para que normalmente no requiera tal llamada, no es que nunca sea necesaria. – Chris

Cuestiones relacionadas