Cómo solicitar un IntentService para obtener información sobre su cola

Tengo un IntentService que las colas encima de las llamadas del servicio de la tela que necesitan ser hechas a mi servidor de la tela. Por lo tanto, cada Intención es una llamada de servicio web a realizar.

Me gustaría establecer algo donde mi aplicación puede preguntar a este IntentService si tiene algún Intents que contenga una pieza de datos en particular (IE: "¿Ya está esperando para pedir a la nube datos x? ¿O tengo que decirle que ¿hazlo?").

¿Hay alguna sugerencia sobre cómo puedo extender IntentService para hacer esto? ¿Se puede recorrer la cola de Intent de un IntentService? ¿O necesitaría tomar el código de IntentService y modificarlo?

La única otra idea que tengo es agregar una tabla a la base de datos y registrar qué llamadas están en la cola, con cada registro que se quita de la tabla cuando esté terminado.

¿Hay alguna sugerencia sobre cómo puedo extender IntentService para hacer esto? ¿Se puede recorrer la cola de Intent de un IntentService? ¿O necesitaría tomar el código de IntentService y modificarlo?

Probablemente este último, si realmente desea examinar la cola real. IntentService convierte los Intents en mensajes en la cola de mensajes de un Looper través de un HandlerThread . Sin embargo, nada de eso está expuesto a través del SDK. Afortunadamente, IntentService es bastante corto – ni siquiera 150 líneas. Usted podría clonarlo en su propio paquete y hacer las modificaciones según lo necesitado. Simplemente ejecute un diff en la fuente cuando se publiquen nuevas actualizaciones de código fuente en el repositorio de AOSP, por lo que sabe si Google realizó alguna cirugía mayor en IntentService sí que pueda aprovechar.

La única otra idea que tengo es agregar una tabla a la base de datos y registrar qué llamadas están en la cola, con cada registro que se quita de la tabla cuando esté terminado.

Ni siquiera tendría que ser persistente, ya que la propia cola de IntentService no es persistente. Simplemente mantenga su propia cola FIFO en onStartCommand() , encadenando a la superclase y haciendo estallar su Intent fuera de la cola al final de onHandleIntent() . Esto tiene una posibilidad de salir de la sincronización con la cola maestra (por ejemplo, usted querrá utilizar finally para asegurarse de que pop el trabajo fuera de su propia cola), pero no tendría que clonar la clase.

Otra solución podría ser resolverlo reemplazando onStartCommand.

Aquí está una solución lisa en la que encontré inspiración para un problema similar 🙂

  • OnBind / onRebind no se llama en Service
  • ¿Es posible tener Android Voice Recognition (como un servicio personalizado) en Google Glass?
  • AlarmManager y BroadcastReceiver en lugar de servicio - ¿es eso malo? (Se acabó el tiempo)
  • Cámara Android: se ejecuta en segundo plano desde el servicio
  • ¿Cómo puedo enlazar este servicio en Android?
  • Alternativa al método finish () para la clase de servicio? Matarlo muerto
  • El servicio de Google Geocoder no es viable (Coordenadas a la dirección)
  • Samsung inhabilita paquetes
  • Detectar si mi servicio de accesibilidad está habilitado
  • Android API21: VoiceInteractionService onReady () no se llama
  • El servicio de Android se detiene al salir de la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.