2010-07-29 18 views
6

¿Cuál es la forma correcta de intercambiar datos u objetos entre diferentes actividades de Android?¿Cómo intercambiar datos (objetos) entre diferentes actividades de Android?

pantalla de bienvenida < -> Pantalla principal < - rutinas> inicio < - datos> Procesamiento < -> Configuración

¿Es normal/recomienda tener más de una actividad en la aplicación para Android? en mi opinión, es de algún modo extraño tener este modelo de intercambio de datos dentro de la aplicación

+0

posible duplicado de [¿Cómo paso datos entre actividades en Android?] (Http://stackoverflow.com/questions/2091465/how-do- i-pass-data-between-activities-in-android) –

Respuesta

6

Hay una visión general en la página de desarrolladores de Android:

http://developer.android.com/guide/appendix/faq/framework.html#3

Para resumir, depende de qué tipo de datos tu vas a pasar Pero en términos generales, si es posible, elegiría Intents, porque son rápidos y están diseñados para eso.

Here es un ejemplo que explica cómo pasar datos entre actividades usando Intents.

+4

Solo usa los extras de 'Intento' para las cosas que están relacionadas con lo que estás comenzando. Piense en ellos como equivalentes a los parámetros en una URL utilizada en un enlace entre las páginas de un sitio web. En particular, no almacene los datos del modelo en extras 'Intent', ya que terminará con N copias de esos datos a medida que pasa de una actividad a otra. Además, 'Intents' permanece en la memoria durante bastante tiempo, a veces incluso después de que se destruye la actividad, por lo que el costo de la memoria se vuelve mucho mayor. – CommonsWare

4

La respuesta es: Depende.

Dependiendo de la arquitectura de la aplicación, es posible que desee:

  • almacenar los datos en un ContentProvider personalizado y pasar alrededor de referencias URI a ella --- si su aplicación se basa en una base de datos , este es el camino a seguir, ya que permite que otras aplicaciones se refieran directamente a sus elementos de datos;

  • Haga que sus actividades se comuniquen enviando Intenciones mutuamente, con los datos empaquetados dentro de los campos de datos de intenciones personalizados --- si solo está utilizando elementos muy pequeños de datos, como nombres o URI, esta es una manera simple de administrar cosas, pero se descompone para artículos más grandes;

  • Organice sus actividades en un solo proceso y almacene sus datos en objetos compartidos de Java; generalmente no recomendado, pero adecuado para aplicaciones especializadas como juegos (¡pero tenga en cuenta los problemas relacionados con el ciclo de vida de las aplicaciones!)

Mis aplicaciones tienden a utilizar una combinación de los dos primeros: los datos principalmente vive en un ContentProvider, pero también utilizan los intentos de enviar información fuera de banda entre el ContentProvider y las actividades cuando ganaron esos datos Encaja fácilmente en la API ContentProvider.

9

¿Es normal/recomendable tener más que una actividad en la aplicación de Android?

Normal? Sí. ¿Recomendado? Eso depende de la aplicación.

en mi opinión, es de alguna manera extraña a este modelo de intercambio de datos dentro de la aplicación

¿Qué haces con las aplicaciones Web? Bueno, mantienes tu modelo en un lugar central (servidor) y pasas pequeños trozos de datos de contexto (parámetros de URL) en enlaces entre unidades principales de UI (páginas).

¿Qué hace con las aplicaciones de escritorio? Bueno, mantienes tu modelo en un lugar central (base de datos) y pasas pequeños trozos de datos contextuales (por ejemplo, parámetros del constructor) en enlaces entre las principales unidades de la interfaz de usuario (Windows).

¿Qué hace con las aplicaciones de Android? Bueno, mantienes tu modelo en un lugar central (base de datos, ContentProvider, etc.) y pasas pequeños trozos de datos contextuales (Intent extras) en enlaces entre unidades principales de UI (actividades).

+0

cuando lo pones así, en realidad es lógico ... – Ante

0

ejecutar las disposiciones de Google que haga aquí: http://developer.android.com/resources/faq/framework.html#3

opciones: tipos de datos primitivos objetos no persistentes clase Singleton - MG: D Un campo/método public static un HashMap de WeakReferences a Objetos Objetos persistentes (Preferencias de la aplicación, Archivos, contentProviders, DB SQLite)

Cuestiones relacionadas