Pregunta

Tengo un servicio intensivo que hace cola las llamadas de servicio web que deben hacerse en mi servidor web. Entonces, cada intención es una llamada de servicio web para realizarse.

Me gustaría configurar algo donde mi aplicación pueda preguntarle a este servicio intensivo si tiene alguna intención que contenga un dato particular (es decir: "¿Ya está esperando a la nube de datos de la nube? O necesito decirle que ¿hazlo?").

¿Hay alguna sugerencia sobre cómo podría extender Intentservice para hacer esto? ¿Se puede atravesar la cola de intención de un servicio intensivo? ¿O necesitaría tomar el código de servicio Intentservice y alterarlo?

La única otra idea que tengo es agregar una tabla a la base de datos y registro que las llamadas están en la cola, y cada registro se elimina de la tabla cuando se completa.

¿Fue útil?

Solución

¿Hay alguna sugerencia sobre cómo podría extender Intentservice para hacer esto? ¿Se puede atravesar la cola de intención de un servicio intensivo? ¿O necesitaría tomar el código de servicio Intentservice y alterarlo?

Probablemente lo último, si realmente quieres examinar la cola real. IntentService gira el Intents En los mensajes aparecieron en la cola de mensajes de un Looper a través de HandlerThread. Sin embargo, nada de eso está expuesto a través del SDK. Afortunadamente, IntentService es bastante corto, ni siquiera 150 líneas. Puede clonarlo en su propio paquete y hacer modificaciones según sea necesario. Simplemente ejecute una diferencia en la fuente cuando se lanzan nuevas actualizaciones de fuente en el repositorio de AOSP, para que sepa si Google realizó alguna cirugía mayor en IntentService en sí mismo que querrás aprovechar.

La única otra idea que tengo es agregar una tabla a la base de datos y registro que las llamadas están en la cola, y cada registro se elimina de la tabla cuando se completa.

Ni siquiera necesitaría ser persistente así, ya que el IntentServiceLa propia cola no es persistente. Simplemente mantenga su propia cola FIFO en onStartCommand(), encadenamiento de la superclase, y revocando tu Intent fuera de la cola al final de onHandleIntent(). Esto tiene la posibilidad de salir de sincronización con la cola maestra (por ejemplo, querrá usar finally Para asegurarse de sacar el trabajo de su propia cola), pero no tendría que clonar la clase.

Otros consejos

Otra solución podría ser resolverlo anulando OnStartCommand.

Aquí es una solución suave en la que encontré inspiración para un problema similar :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top