Aclaración de setUpdateCurrent en OneOffTask

Estoy tratando de envolver mi cabeza alrededor del comportamiento de setTag y setUpdateCurrent de OneoffTask en la herramienta GcmNetworkManager.
La documentación de setUpdateCurrent dice esto:

Setter opcional para especificar si esta tarea debe reemplazar cualquier tarea preexistente con la misma etiqueta. Por defecto es false, lo que significa que una nueva tarea no invalidará una existente.

Bastante justo, pero no dice qué sucederá a una tarea, él dice solamente una cosa que no sucederá – es decir la tarea no será anulada. 🙂 No está claro para mí si el uso de setUpdateCurrent significa que las tareas duplicadas están permitidos de que significa que se descartan?

Para ser claro, mi pregunta es la siguiente: Dado que usaste setUpdateCurrent (false), cuando creas OneoffTask con la misma etiqueta que otro OneoffTask que ya está programado, la nueva tarea seguirá ocurriendo además de la programada, o ¿será desechada la nueva tarea, despedida como duplicado?

Dado que se usó setUpdateCurrent (false), al crear OneoffTask con la misma etiqueta que otro OneoffTask que ya está programado, ¿la nueva tarea seguirá ocurriendo además de la ya programada, o se desechará la nueva tarea, se descartará como un duplicado

La nueva tarea se desecha y nunca se programa. Me sorprendió por esto y sin duda se siente la documentación debe haber dicho así.

Resulta que puedes probarlo tú mismo usando el siguiente comando:

adb shell dumpsys activity service GcmService --endpoints YourGcmTaskServiceClassName 

Esto le permite ver cuántas tareas tienen pendientes entre otras cosas. Inmediatamente después de la llamada a GcmNetworkManager.getInstance(this).schedule(task) en su código, el número de tareas de su paquete se incrementará en la salida del comando adb:

 Tasks count by package: com.mypackage: 1 

y debajo de ese es un área que muestra las tareas pendientes:

 Pending: (scheduled) endpoint='com.mypackage/com.mypackage.YourGcmTaskServiceClassName' tag='testing' : [PENDING] u0 Next execution: [early=17s, expires=37s] Not yet run. 

Ahora, si intenta programar otra tarea con setUpdateCurrent(false) y la misma etiqueta que la tarea que está actualmente pendiente, notará que la próxima vez que ejecute el comando adb solo queda una tarea pendiente y es la primera tarea programada.

Si especifica setUpdateCurrent(true) una tarea también permanece programada, pero como se esperaba, será la nueva tarea.

Por último, si especifica tareas con diferentes etiquetas y las programa, el número de tareas se convertirá en dos y ambas tareas estarán pendientes, lo que también se espera.

  • Clear Aplicaciones recientes limpiar la memoria de aplicaciones y mi receptor dejó de funcionar
  • Force Parse Push Notifications para usar PPNS en lugar de GCM
  • Comportamiento de aplicaciones Android VOIP en modo Doze
  • No recibe la notificación de push de GCM de Amazon SNS
  • Notificaciones push en Android: Google GCM vs Amazon SNS?
  • Envío de una carga útil de notificación únicamente a GCM mediante AWS SNS
  • Error de GCM - googleCloudMessaging.register
  • Diferentes sabores con GCM
  • Google GCM Android bloquea (java.lang.NoClassDefFoundError: com.google.android.gms.R $ cadena)
  • ¿Cómo migrar el centro de notificación Azure a Firebase Cloud Messaging?
  • Aplicación para Android que comienza lentamente - dex2oat El código postal está ausente. Cancelado - Gradle 2.10
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.