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.
- Notificación de Android: agregue la tipografía para el título y el contenido
- SecurityException: No se le permite iniciar el servicio Intención act = com.google.android.c2dm.intent.REGISTER
- Compartir servicios y permisos de manifiesto del proyecto de la biblioteca
- Parse.com - Sonido personalizado de notificación push de Android
- Android GCM con sabores de producto
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?
- Enviar notificaciones push a Android
- Los dispositivos Android 4.x reciben mensajes GCM, pero los dispositivos Android 2.3
- Android: ¿Cuál usar para el nombre del paquete? Nombre de paquete de manifiesto o aplicación de GradleId?
- Amazon SNS: ¿Maneja Google Cloud Messaging Ids canónica?
- INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
- Android L conflicto de permisos entre release y debug apks
- Obtenga el valor de RemoteMessage del método FCM onMessageReceived
- Android GCM SENDER_ID, cómo obtenerlo?
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.
- Permitir que el rectángulo se haga clic – android
- La vista de texto no se desplaza dentro de la lista personalizada