Estoy trabajando en un pequeño proyecto de Android donde es necesario compartir algunos datos entre varias actividades y un servicio que se ejecuta en un proceso separado. Me gustaría saber cuáles son mis opciones en términos de compartir datos. Clase de aplicación? IPC? Basado en archivos? Transmisiones? ¡Gracias chicos!Compartir datos entre actividades y servicios
Respuesta
1. Parece que necesitas transmitir algo de información. Usted podrá configurar los receptores de difusión en cualquier actividad/servicio que le gustaría recibir notificaciones.
Leer más en línea sobre Broadcastreceiver y sobre send broadcast
2. ¿Cómo paso datos entre Actividades/Servicios dentro de una sola aplicación?
Depende del tipo de datos que desea compartir:
tipos de datos primitivos Para compartir datos entre primitivas Actividades/Servicios en una aplicación, utilice Intent.putExtras(). Para pasar datos primitivos que deban persistir, utilice el mecanismo de almacenamiento Preferences.
objetosno persistentes Para compartir objetos definidos por el usuario no persistentes complejos de corta duración, se recomiendan los siguientes enfoques:
La clase android.app.Application
El androide .app.Application es una clase base para aquellos que necesitan mantener el estado global de la aplicación. Se puede acceder a través de getApplication() desde cualquier actividad o servicio. Tiene un par de métodos de ciclo de vida y será instanciado por Android automáticamente si lo registra en AndroidManifest.xml.
Un campo public static/método
Una forma alternativa de hacer que los datos sean accesibles a través de Actividades/Servicios es el uso de campos y/o métodos estáticos públicos. Puede acceder a estos campos estáticos desde cualquier otra clase en su aplicación. Para compartir un objeto, la actividad que crea su objeto establece un campo estático para apuntar a este objeto y cualquier otra actividad que quiera usar este objeto solo accede a este campo estático.
Un HashMap de WeakReferences a objetos
También puede utilizar un HashMap de WeakReferences a objetos con claves largas. Cuando una actividad quiere pasar un objeto a otra actividad, simplemente coloca el objeto en el mapa y envía la clave (que es un Long único basado en un contador o marca de tiempo) a la actividad del destinatario a través de extras de intención. La actividad del destinatario recupera el objeto usando esta clave.
Un Singleton clase
Hay ventajas en el uso de un Singleton estático, como se puede hacer referencia a ellos sin poner en getApplication() para una clase específica de la aplicación, o ir a la molestia de colgar una interfaz en todas sus subclases de aplicaciones para que sus diversos módulos puedan referirse a esa interfaz en su lugar.
Pero, el ciclo de vida de una estática no está bajo su control; así cumplir con el modelo de ciclo de vida, la clase de aplicación debe iniciar y derribar estos objetos estáticos en el onCreate() y onTerminate() de la clase de aplicación
persistentes Objetos Incluso cuando aparece una aplicación a continúa ejecutándose, el sistema puede elegir eliminar su proceso y reiniciarlo más tarde. Si tiene datos que necesita para pasar de una invocación de actividad a la siguiente, debe representar esos datos como un estado que se guarda por una actividad cuando se le informa que podría desaparecer.
Para compartir objetos definidos por el usuario persistentes complejos, se recomiendan los siguientes enfoques:
Application Preferences
Files
contentProviders
SQLite DB
Si los datos compartidos necesita ser conservado a través de los puntos en el proceso de solicitud puede ser matado, a continuación, colocar los datos en persistente almacenamiento como Preferencias de aplicación, SQLite DB, Archivos o ContentProviders. Consulte Data Storage para obtener más detalles sobre cómo usar estos componentes.
- 1. Compartir un objeto entre actividades
- 2. Android: compartir actividades/código entre diferentes aplicaciones
- 3. Cómo compartir los mismos datos entre múltiples actividades
- 4. Compartir bases de datos sqlite entre múltiples actividades de Android
- 5. Compartir objetos DTO entre servicios de WCF
- 6. ¿Cómo compartir la memoria entre servicios y procesos de usuario?
- 7. Compartir datos entre AppDomains
- 8. Javascript: compartir datos entre pestañas
- 9. Compartir datos entre páginas html
- 10. Pasar datos entre actividades en Android
- 11. Compartir una enumeración entre los servicios web de ASMX
- 12. Compartir datos entre controles de usuario
- 13. Compartir datos de iCloud entre dos aplicaciones
- 14. Compartir datos entre aplicaciones en un iDevice
- 15. compartir una base de datos entre el trenzado y Django
- 16. ¿Cómo compartir datos entre la actividad y el widget?
- 17. NSPrivateQueueConcurrencyType de Datos Básicos y compartir objetos entre hilos
- 18. compartir datos entre dos aplicaciones de iphone
- 19. Compartir datos entre procesos en Python
- 20. ¿Cómo puedo compartir un servicio entre actividades sin que se reinicie?
- 21. Android PagerView entre actividades
- 22. SOA Style - Compartir datos
- 23. ¿Buenas alternativas para compartir un árbol complejo de objetos entre actividades en Android?
- 24. Integridad referencial de datos entre servicios
- 25. ANDROID: compartir sesión entre Webview y httpclient
- 26. ¿Cómo intercambiar datos (objetos) entre diferentes actividades de Android?
- 27. Compartir una sesión entre Ruby y PHP
- 28. Compartir matriz entre lua y C
- 29. diferencia entre servicios y receptores de difusión
- 30. Patrón para compartir datos entre objetos en C++
Guau, muchas gracias por esta respuesta tan informativa. – Jack
por qué desperdiciar tanta memoria en abstracciones. ¿No hay una opción para datos globales? Por qué los chicos de Java/Android pierden tanta memoria – mSO
el servicio y la actividad se ejecutan como procesos diferentes, por lo que no comparten espacio de memoria, por lo que la mayoría de las sugerencias enumeradas anteriormente no funcionarán. – whoami