android - firebasejobdispatcher - Firebase JobDispatcher: ¿cómo funciona en comparación con las API anteriores(JobScheduler y GcmTaskService)?
jobdispatcher android example (1)
En realidad, Firebase Android JobDispatcher es una capa de abstracción en torno a los motores de programación de trabajos en Android. Y por ahora solo tienen una implementación de controlador para GCM Network Manager. Eso significa que actualmente se comporta de la misma manera que se comporta GCM Network Manager . Esperemos que en el futuro se implementen más controladores.
1. ¿Puede un trabajo tener parámetros que permanezcan con él e incluso pueden modificarse cuando sea necesario? Dicen en la muestra "Un paquete opcional de extras suministrados por el usuario. El valor predeterminado es un paquete vacío". . Es esto? ¿Puede ser modificado por el trabajo una vez ejecutado?
-
Sí,
Job.Builder
tieneJob.Builder
método con paquete arbitrario al que luego se puede acceder a través dejobParameters.getExtras()
. No puede modificar el paquete (jobParameters
contiene solo getters). Puede reprogramar su trabajo con el indicadorsetReplaceCurrent(true)
y especificar un nuevo paquete.
2. ¿Se pueden reprogramar los trabajos fácilmente? Se dice "Un booleano que indica si el trabajo debe repetirse". ¿Cómo se puede elegir cuándo reprogramar? Probé la muestra y elegí "Recurrente", pero no parece volver a ejecutarse, solo una vez.
-
Para volver a programar el trabajo, debe especificar
setRecurring(true)
,setTrigger(Trigger.executionWindow(10, 20))
Esto se activa tan pronto como se alcanza la fecha límite de inicio de la ventana, y se anima a los conductores a ejecutar el Trabajo antes de que finalice la ventana si es posible.
3. ¿Se puede proteger frente a los trabajos de la biblioteca (debido a identificadores únicos)?
-
Las etiquetas de trabajo deben ser únicas en su aplicación. Otras aplicaciones en el teléfono tienen sus propios "puntos finales" (nombre del paquete / nombre del servicio). Para ver todos los trabajos programados / finalizados para
GooglePlayDriver
, utiliceadb shell dumpsys activity service GcmService
4. ¿Necesita un cuidado especial al actualizar la aplicación (como lo hicieron las API anteriores)? ¿Todavía se pueden programar trabajos después de una actualización de la aplicación? Al probar en la muestra, parece que los trabajos se han ido por completo después de una actualización de la aplicación. ¿Se puede evitar?
-
En cuanto a GCM Network Manager,
GooglePlayDriver
no reprograma los trabajos después de que Google Play Services o la aplicación se actualicen. Aquí hay un problema abierto para esto. Así que por ahora esta es tu responsabilidad.
5. ¿Necesita RECEIVE_BOOT_COMPLETED en caso de que quiera que el trabajo aún se programe incluso cuando se reinicia el dispositivo? La muestra parece tenerlo.
-
Sí, necesitas ese permiso.
Builder tiene un parámetro para controlar el comportamiento:
setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT)
Por supuesto, si va a crear su propio controlador, tendrá que ocuparse de la vida usted mismo.
6. ¿Es posible obtener una lista de todos los trabajos programados y su información (incluidos los parámetros), y poder cancelar específicos / todos ellos e incluso modificarlos?
- No, lo mismo que para GCM Network Manager. Pero podría realizar un seguimiento de todos los trabajos usted mismo de alguna manera mientras los programa para jugar.
7. ¿Se eliminará un trabajo después de la operación de datos claros de la aplicación?
- Sí, el trabajo será eliminado. Probablemente en las versiones anteriores de los servicios de Google Play se comportó de manera diferente.
8. ¿Es posible decirle al trabajo que es mejor que se ejecute en un rango de tiempo (ejemplo: entre las 7:00 y las 8:00 de la mañana)? Se menciona "ExecutionWindowTrigger, que especifica una ventana de tiempo en la que se debe ejecutar el Trabajo". ¿Es asi? ¿Qué sucede cuando se pierde esta ventana?
-
Bueno, puede configurar una alarma para que se active a las 7:00 y programar un trabajo no recurrente con
executionWindow(0, 60*60)
. El trabajo se ejecutará entre las 7:00 y las 8:00.
No puede usar trabajo recurrente porquewindowStart: el tiempo más temprano (en segundos) que el trabajo debe considerarse elegible para ejecutarse. Calculado a partir de cuándo se programó el trabajo (para trabajos nuevos) o la última ejecución (para trabajos recurrentes).
Además, ExecutionWindowTrigger especifica el tiempo aproximado. No está garantizado que se ejecute en la ventana dada. Si pierde la ventana, el trabajo se ejecutará en cualquier momento posterior.
9. El método "onStartJob" en la clase "JobService" devuelve un valor booleano y la descripción es "si queda más trabajo". . Qué significa eso? ¿Qué significa el parámetro "needsReschedule" del método "jobFinished"? ¿Están relacionados entre sí?
-
Si
onStartJob
devuelve falso, significa que ha completado su trabajo. No es necesario invocar el trabajojobFinished
.RESULT_SUCCESS
se envía automáticamente.
si
onStartJob
devuelve verdadero, eso significa que inició un hilo y espera resultados.
Tan pronto como haya terminado, debe invocar
jobFinished
para informar a los servicios de Google Play si el trabajo debe reprogramarse o no.
En caso afirmativo, el trabajo se reprogramará en función de
RetryStrategy
.
10. ¿Hay alguna restricción que deba saber? Por ejemplo, ¿valores mínimos y máximos para cada una de las funciones?
-
-
onStartJob
debería descargar el trabajo a otro hilo de ejecución lo antes posible. Proporcionan unSimpleJobService
como ejemplo de lo que se espera de usted. -
No hay implementación de controlador para
JobScheduler
de Lollipop. También es necesario manejar la situación cuando los servicios de Google Play no están disponibles, probablemente deberíamos implementarDriver
basado enAlarmManager
.
-
Fondo
Google tiene múltiples soluciones para la programación de trabajos / tareas, como
JobScheduler
y
GcmTaskService
.
Cada uno tiene sus propias ventajas y desventajas.
Recientemente, Google presentó una nueva biblioteca llamada "Firebase JobDispatcher".
El problema
Lamentablemente, hay muy poco que leer sobre esta nueva API. De hecho, es realmente difícil encontrar algo al respecto.
Lo único que he encontrado es su video de anuncio y una muestra . Pero incluso su, no hay mucho que saber sobre esta API.
Las preguntas
Mirando preguntas anteriores, investigaciones y comparaciones que tuve con las otras API ( here , por ejemplo), me gustaría preguntar cómo funciona la nueva API y saber qué tener en cuenta al usarla:
-
¿Puede un trabajo tener parámetros que permanezcan con él e incluso pueden modificarse cuando sea necesario? Dicen en la muestra " Un paquete opcional de extras suministrados por el usuario. El valor predeterminado es un paquete vacío " . ¿Es esto? ¿Puede ser modificado por el trabajo una vez ejecutado?
-
¿Se pueden reprogramar los trabajos fácilmente? Se dice " Un booleano que indica si el trabajo debe repetirse ". ¿Cómo se puede elegir cuándo reprogramar? Probé la muestra y elegí "Recurrente", pero no parece volver a ejecutarse, solo una vez.
-
¿Se puede proteger frente a los trabajos de la biblioteca (debido a identificadores únicos)?
-
¿Necesita un cuidado especial al actualizar la aplicación (como lo hicieron las API anteriores)? ¿Todavía se pueden programar trabajos después de una actualización de la aplicación? Al probar en la muestra, parece que los trabajos se han ido por completo después de una actualización de la aplicación. ¿Se puede evitar?
-
¿Necesita
RECEIVE_BOOT_COMPLETED
en caso de que quiera que el trabajo aún se programe incluso cuando se reinicia el dispositivo? La muestra parece tenerlo. -
¿Es posible obtener una lista de todos los trabajos programados y su información (incluidos los parámetros), y poder cancelar específicos / todos ellos e incluso modificarlos?
-
¿Se eliminará un trabajo después de la operación de datos claros de la aplicación?
-
¿Es posible decirle al trabajo que es mejor que se ejecute en un rango de tiempo (ejemplo: entre las 7:00 y las 8:00 de la mañana)? Se menciona " ExecutionWindowTrigger, que especifica una ventana de tiempo en la que se debe ejecutar el Trabajo ". ¿Es asi? ¿Qué sucede cuando se pierde esta ventana?
-
El método
onStartJob
en la claseJobService
devuelve un valor booleano y la descripción es " si queda más trabajo " . ¿Qué significa? ¿Qué significa el parámetrojobFinished
métodojobFinished
? ¿Están relacionados entre sí? -
¿Hay alguna restricción que deba saber? Por ejemplo, ¿valores mínimos y máximos para cada una de las funciones?