Empleos para GCM Network Manager

Estoy tratando de utilizar GCM Network Manager para enviar registros a servicio de back-end. Tenemos una alarma corriendo alrededor de cada hora que crea una OneoffTask que, cuando se ejecuta, llamará al servicio backend con el mensaje de registro.

Esto funciona, pero una gran cantidad de las tareas se pierden (forma más de la mitad). Al principio, pensé que tiene algo que ver con nuestro backend, o la red, pero después de agregar una tonelada de registro de archivos, resulta que onRunTask en el servicio nunca se dispara para estas tareas (pero definitivamente se están programando. ¿Están estos perdidos? ¿Estoy malinterpretando la API, o OneoffTasks simplemente no es confiable?

Así es como se programa el OneoffTask:

GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder() .setService(AvroLogService.class) .setExtras(bundle) // A mandatory tag which identifies the task // We add a unique hash to the tag to make sure that // tasks are logged and not thrown away as dupes. // See: http://stackoverflow.com/q/34528960/304262 .setTag(java.util.UUID.randomUUID().toString()) // Persist to disk, even across boots: .setPersisted(true) // Sets a time frame for the execution of this task in seconds. // This specifically means that the task can either be // executed right now, or at latest at a certain point: .setExecutionWindow(0, TWO_WEEKS_IN_SECONDS) .build()); 

Una vez más, esto no funciona, pero sólo parte de los mensajes. Para los mensajes que se pierden posteriormente, el código anterior se ejecuta definitivamente (he agregado el registro de archivos para verificar esto), pero nunca hay un OnRunTask correspondiente activado para los perdidos.

He verificado que:

  1. El Manifiesto se actualiza de acuerdo con la Guía de implementación de Network Manager ( https://developers.google.com/cloud-messaging/network-manager )
  2. AvroLogService (mi servicio) extiende GcmTaskService
  3. Anula enRunTask
  4. La aplicación tiene permiso RECEIVE_BOOT_COMPLETED.
  5. AvroLogService NO sobreescribe onStartCommand.

Estoy perdido. ¿Puede alguien compartir ideas sobre esto?

Como la respuesta anterior rango de tiempo de ejecución puede ser grande. También pienso que usted quiere ejecutar el acontecimiento periódicamente intento use PeriodicTask.Builder en vez deOneoffTask.Builder

Como supongo que su constante TWO_WEEKS_IN_SECONDS realmente significa 2 SEMANAS. En este caso, la tarea es elegible para la ejecución en cualquier punto de tiempo de ahora a 2 SEMANAS. Por lo tanto, esta tarea no tiene que ser ejecutada cada hora. Intente establecer la ventana de ejecución en un rango de una hora o menos ( .setExecutionWindow(0, HALF_AN_HOUR_IN_SECONDS) )

Ver google api docs

  • INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
  • Vibrar en la notificación push
  • Android GCM con sabores de producto
  • Aclaración de setUpdateCurrent en OneOffTask
  • IncompatibleClassChangeError después de actualizar a Android Build Tools 25.1.6 GCM / FCM
  • Mostrar notificaciones push cuando la aplicación se abre / cierra de manera diferente
  • Clear Aplicaciones recientes limpiar la memoria de aplicaciones y mi receptor dejó de funcionar
  • Android L conflicto de permisos entre release y debug apks
  • Google GCM: no recibe notificaciones push en android Lollipop
  • Notificaciones de usuarios - ¿Cómo recuperar un notification_id perdido de GCM?
  • GCM Network Manager - Tarea periódica no disparando
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.