Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo implementar la comunicación Actividad-Servicio

Tengo la siguiente situación:

Tengo un servicio que comprueba periódicamente para los nuevos datos sobre el Internet,

  • Cuando se dispone de nuevos datos, se descargan y se guardan en sqlite.
  • Cuando el save to db está completo, el servicio transmite una intención para que la actividad sepa extraer los nuevos datos del db.

Es posible que el usuario desee solicitar una actualización inmediata …

… en ese caso utilizo un Messenger para solicitar al Servicio que busque nuevos datos

Aquí está el problema:

Se notifica al usuario que una solicitud está en curso, pero puede tardar un tiempo, puede no tener éxito, nunca podría volver …

Actualmente recibo un mensaje (usando un Messenger) de nuevo del Servicio a la Actividad informando del resultado de la petición, o, si no recibo ningún mensaje, en x segundos informo al usuario que la solicitud no tuvo éxito.

  1. Por favor, ¿puede sugerir un enfoque diferente?
  2. No me gusta esperar un mensaje y si después de x segundos ninguno se recibe informar al usuario, ¿hay una mejor manera?

  • Establecer el efecto de ondulación en la vista de imagen
  • Biblioteca de visor de PDF de Android o tutoriales de biblioteca de muPDF
  • Error de sincronización Gradle: no se puede encontrar el método
  • ¿Cuál es la diferencia entre usar add (). AddToBackStack (), add (). Detach () y replace (). AddToBackStack () en un FragmentTransaction?
  • Set / Get Java List <> del código C
  • Java compilador para teléfonos Android
  • Android: Poner cuadrícula de objetos dinámicos y personalizados dentro de otra cuadrícula de objetos dinámicos y personalizados
  • Indicador de actualización de Android SwipeRefreshLayout no visible
  • 3 Solutions collect form web for “Cómo implementar la comunicación Actividad-Servicio”

    Tienes lo básico, así que no hay mucho más que recomendar. Te voy a mostrar algunas alternativas:

    • Puede utilizar ContentObserver y actualizar la interfaz de usuario una vez que haya nuevos datos en la base de datos (no es necesario esperar un mensaje del servicio).
    • Si tiene mucha comunicación entre los componentes de Service <-> UI, podría ser más fácil si echa un vistazo a Otto , EventBus o simplemente reestructurar su código alrededor de Observables / RxJava .
    • Usted puede mover la lógica de tiempo de espera al servicio (será más fácil de esta manera ya que todo el manejo de errores será en un solo lugar) y simplemente devolver el mensaje de error a la interfaz de usuario. La mayoría de los marcos de red le permiten establecer un parámetro de tiempo de espera de conexión y fallará la solicitud después de que se alcance este tiempo. Si usted no ha mirado los marcos de la red todavía – Retrofit + OkHttp es un gran punto de partida.

    Usted podría considerar optimista prestación / optimista actualizaciones – Un patrón en el que actualizar la interfaz de usuario en el cliente como si se tiene éxito en el servidor. Una vez que obtenga la respuesta del servidor actualizar la interfaz de usuario en consecuencia. Puede referirse a las aplicaciones con nuevos diseños como google hangouts.

    Para más información refiérase a estas discusiones:

    Supongo que usar este enfoque le dará una mejor usabilidad a su aplicación.

    La implementación actual se ve bien. Sin embargo, puede mejorarlo siguiendo esta charla: https://www.youtube.com/watch?v=BlkJzgjzL0c

    Si piensa en esto como un problema de Model View Controller, el problema aquí es la falta de un modelo para representar el estado del Servicio. Cuando el Servicio está realizando la actualización, este "estado" debe reflejarse en su interfaz de usuario. Por lo tanto, el servicio necesita registrar esto en algún lugar que la interfaz de usuario puede tener acceso.

    Una opción es simplemente un pedazo de memoria compartida, como un objeto Singleton o incluso una variable de miembro estático (no recomendado). Otra opción es mantener ese estado en su base de datos.

    Otro problema es notificar a la interfaz de usuario cuando cambia este estado. Como se mencionó en otros puestos hay varias maneras de hacer esto, como un LocalBroadcast, bus de mensajes como Otto, ContentObservers, etc

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.