5

Solo me pregunto qué es una mejor práctica para pasar información entre actividades, agregarla a un paquete o usar una clase singleton para almacenar y acceder a esta información. He usado ambos en el pasado para varios proyectos de Android, pero ahora estoy trabajando en un proyecto de Android que es de una escala mucho mayor, por lo que preferiría hacer las cosas bien desde el principio.Información persistente de pase de Android en paquetes o uso de patrón singleton?

Mi aplicación autentica a los usuarios y luego tendrá que hacer varias consultas en función de su id. Para minimizar el acoplamiento entre actividades, creo que solo agregar el ID al paquete y luego dejar que cada actividad busque la información que necesita, sería la mejor opción; Sin embargo, para aumentar la capacidad de respuesta, me inclinaba por usar una clase única para almacenar información persistente, lo que evitaba más consultas de las necesarias.

Respuesta

7

Personalmente, crearía una extensión de Application para almacenar el estado de su aplicación y compartir datos entre las diferentes actividades. El Application actúa como el contexto para toda su aplicación y Android garantiza que siempre habrá solo una instancia en su aplicación. Por lo tanto, funciona de manera similar a la definición de su propio Singleton, pero usar Application le permitirá a Android tomar el control del ciclo de vida de sus datos compartidos y básicamente gestionar la memoria por usted.

Here are some more details. Si avanza por esta ruta, puede simplemente agregar cualquier método getter/setter (u otro) a su extensión de aplicación para almacenar/recuperar datos y realizar operaciones en él. Especialmente, este último puede ser bastante difícil de manejar (y mantener la coherencia) cuando se usan Bundle pasados ​​de una actividad a otra. Si solo utilizara un Bundle si los datos son necesarios en solo uno o dos lugares que son vecinos en el flujo de actividad y no necesita ninguna operación (compleja) para ejecutarse en él.

+0

Gracias MH, definitivamente parece ser la ruta a seguir. –

+0

Lo siento, no marqué esta respuesta como la respuesta correcta más pronto! –

+1

Cualquier sugerencia sobre la restauración del estado de esta información persistente cuando la aplicación se mata/reinicia? No hay devoluciones de llamada para guardar esta información, por lo que lo único que se me ocurrió fue escribirlo en SharedPreference. –

0

Pasar paquetes es un trabajo tedioso. Tendrá que pasar un paquete por cada cambio en la actividad para asegurarse de que el valor no se pierda, incluso si no está utilizando el valor en la actividad llamada.

1

La única vez que paso datos entre Actividades a través de bunlde es si es algo a lo que no necesitaré acceder por un tiempo (es decir, el resID de un recurso que quiero usar solo una vez en la actividad de llamada, etc.) . También creo que la diferencia en la capacidad de respuesta sería mínima, por lo que no debería ser motivo de preocupación. Sugiero el enfoque singleton

1

La mejor manera de hacerlo es utilizar SharedPreferences para mantener userId que necesita conservar y reutilizar. Por supuesto, puede usar el enfoque singleton o incluso la clase de aplicación, pero los datos se perderán después de la muerte de la aplicación.

0

El patrón Singleton tiene algunos malos resultados. Por ejemplo: desde la actividad principal, llama actividad secundaria. La llamada telefónica interrumpió su trabajo. Después de finalizar la llamada telefónica, Android está tratando de llevar la actividad secundaria a la pantalla. Aquí está mi pesadilla: muchos usuarios se quejan de las excepciones. Google me informó punteros nulos en mi singleton. Por lo tanto, debe proporcionar no solo singleton, sino que todos los datos dentro de singleton deben ser también singleton. Este hecho viene muy complicado :(

Cuestiones relacionadas