La mejor manera de realizar la comunicación entre actividades en una aplicación Android TabHost

Aquí está el trato: Tengo una aplicación de Android que necesita llamar a un servicio web cada X segundos (actualmente 60 segundos). Esta aplicación tiene varias pestañas y todas estas pestañas necesitan interactuar con los propios datos. Uno es un MapView, uno es un ListView y luego el tercero es irrelevante, pero también necesitará obtener algunos datos globales. El problema es que quiero que mi actividad principal tenga un subproceso que se ejecute en segundo plano, obtenga los resultados y, a continuación, instruya a ambas actividades secundarias en TabHost para que se actualicen con los datos más recientes. Además, cuando el usuario hace clic en las pestañas y las actividades onCreate / onResume activan, también me gustaría forzar un nuevo dibujo al obtener los datos más recientes de la actividad principal. Estoy realmente perdido aquí. He intentado esto con un servicio y algunos métodos estáticos del ghetto para pasar una instancia de las actividades al servicio para llamar funciones específicas para poner al día sus opiniónes siempre que el temporizador encendió, pero las retardaciones eran bastante malas y el código era feo feo feo . ¿Alguna sugerencia?

Edit: Así que lo implementé como un hilo controlado por temporizador en la actividad tabhost y luego tengo hilos controlados por temporizador en cada actividad secundaria que luego toman los datos (de forma sincronizada) y actualizan su mapa / lista. Es mucho más rápido, pero todavía se siente ligeramente hack-ish, especialmente la parte en la que estoy llamando a una función personalizada en la actividad de los padres de la siguiente manera:

((MainActivity)getParent()).getNearbyMatches(); 

Esto añade un elemento de acoplamiento fuerte que no estoy completamente emocionado, pero desde el punto de vista del rendimiento es mucho mejor de lo que era. Agradezco las respuestas que ya se han dado y haré un poco de investigación en el frente del proveedor de contenido, pero no estoy seguro de querer volver al modelo de servicio.

Así que he encontrado lo que creo que es la respuesta: La clase de aplicación . Puede ampliar esta clase para realizar un seguimiento del estado de la aplicación global.

En el archivo AndroidManifest.xml puede hacer referencia a su clase personalizada completa en el atributo android:name y se instanciará cuando se dispare la aplicación.

Cualquier actividad puede llamar a "getApplication()" y devolverá la instancia de su clase de aplicación personalizada, que puede adaptar a gusto.

¿Por qué está actualizando todas las actividades de los niños cada vez que hay nuevos datos disponibles? Eso me suena ineficiente. Actualizar sólo la actividad que está actualmente visible.

Una forma posible de hacerlo es a través de un proveedor de contenido personalizado . Permita que su servicio actualice el origen de datos a sus actividades y obtenga la actividad visible actual para escuchar los cambios en este contenido. Por lo tanto, básicamente, su registro para el proveedor de contenido cuando OnResume se llama y anular el registro cuando OnPause se llama.

Como regla general, nunca guarde referencias estáticas de una Actividad !! Usted terminará con fugas feas. Si es una necesidad para su aplicación, utilice por lo menos WeakReferences

Puede implementar las actualizaciones de GUI en Handler s y registrar las instancias de Handler con su subproceso de descarga. El hilo de descarga envía mensajes a los controladores cuando llega un nuevo dato. Esencialmente este es el patrón de Observador . Puede encontrar un ejemplo de cómo utilizar Handler s aquí (expanda la sección 'Ejemplo ProgressDialog con un segundo hilo').

  • Efecto de desvanecimiento entre los diseños
  • Archivo de 0 bytes aparece al capturar la pantalla por screencap
  • Cómo implementar pull para actualizar en un ListFragment
  • Java.exe terminó con valor de salida no nulo 2 en Android Studio
  • Intenta invocar el método virtual 'void android.widget.Button.setOnClickListener (android.view.View $ OnClickListener)' en una referencia de objeto nulo
  • Integración multimedia con LibGDX
  • El mapa de bits guardado en android tiene 3 bytes de largo cuando se lee
  • Android - Ajuste de la posición de la vista de imagen en la parte superior de una vista de imagen con zoom
  • ¿Cómo buscar la cadena entera para una palabra específica?
  • Vista de imagen que no envuelve contenido
  • ¿Puede alguien explicarme por qué esta filtración?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.