Google propose plusieurs solutions pour la planification des tâches / tâches, telles que JobScheduler
et GcmTaskService
. Chacun a ses avantages et ses inconvénients.
Récemment, Google a présenté une nouvelle bibliothèque appelée “Firebase JobDispatcher”.
Malheureusement, il y a très peu à lire sur cette nouvelle API. En fait, il est vraiment difficile de trouver quelque chose à ce sujet.
La seule chose que j’ai trouvée est leur vidéo d’annonce et un échantillon . Mais même leur, il n’y a pas grand chose à savoir sur cette API.
En regardant les questions précédentes, les enquêtes et les comparaisons que j’ai eues avec les autres API ( ici , par exemple), j’aimerais savoir comment fonctionne la nouvelle API et savoir quoi prendre en compte lorsque vous l’utilisez:
Un travail peut-il avoir des parameters qui restnt avec lui et peuvent même être modifiés en cas de besoin? Ils disent dans l’exemple ” Un ensemble facultatif de suppléments fournis par l’utilisateur. La valeur par défaut est un ensemble vide. ” Peut-il être modifié par le travail lors de son exécution?
Les emplois peuvent-ils être reprogrammés facilement? On dit ” Un booléen indiquant si le Job doit être répété “. Comment peut-il être choisi quand re-planifier? J’ai essayé l’exemple, et choisi “Récurrent”, mais il ne semble pas fonctionner à nouveau, seulement une fois.
Peut-il être protégé contre les travaux de la bibliothèque (à cause des identifiants uniques)?
A-t-il besoin de précautions supplémentaires lors de la mise à jour de l’application (comme l’ont fait les API précédentes)? Les travaux peuvent-ils encore être programmés après une mise à jour de l’application? Test sur l’échantillon, il semble que les travaux ont complètement disparu après une mise à jour de l’application. Peut-on l’éviter?
A-t-il besoin de RECEIVE_BOOT_COMPLETED
au cas où je souhaiterais que le travail soit toujours planifié même lorsque le périphérique est redémarré? L’échantillon semble l’avoir.
Est-il possible d’obtenir une liste de tous les travaux planifiés et de leurs informations (y compris les parameters), et d’être capable d’annuler certains / tous et même de les modifier?
Un travail sera-t-il supprimé lors du fonctionnement en clair des données de l’application?
Est-il possible de dire qu’il est préférable que le temps passe dans un intervalle de temps (exemple: entre 7h00 et 8h00 du matin)? Il est mentionné ” ExecutionWindowTrigger – qui spécifie une fenêtre temporelle dans laquelle le Job doit être exécuté “. Est-ce que c’est ça? Que se passe-t-il quand il manque cette fenêtre?
La méthode onStartJob
dans la classe JobService
renvoie un booléen et la description est ” s’il rest du travail à faire ” . Qu’est-ce que cela signifie? Que signifie le paramètre jobFinished
méthode jobFinished
? Sont-ils liés les uns aux autres?
Y a-t-il des ressortingctions à connaître? Par exemple les valeurs minimales et maximales pour chacune des fonctions?
En fait, JobDispatcher est une couche d’abstraction autour des moteurs de planification des tâches sur Android. Et pour l’instant, ils n’ont qu’une seule implémentation de pilote pour GCM Network Manager. Cela signifie qu’à l’heure actuelle, il se comporte de la même manière que GCM Network Manager . J’espère qu’à l’avenir d’autres pilotes seront mis en place.
1. Un travail peut-il avoir des parameters qui restnt avec lui et peuvent même être modifiés en cas de besoin? Ils disent dans l’exemple “Un ensemble facultatif de suppléments fournis par l’utilisateur. La valeur par défaut est un ensemble vide.” . Est-ce ceci? Peut-il être modifié par le travail lors de son exécution?
Job.Builder
a une méthode setExtras
avec un ensemble arbitraire, accessible jobParameters.getExtras()
via jobParameters.getExtras()
. Vous ne pouvez pas modifier le bundle ( jobParameters
ne contient que des getters). Vous pouvez replanifier votre travail avec l’indicateur setReplaceCurrent(true)
et spécifier un nouveau bundle. 2. Les travaux peuvent-ils être reprogrammés facilement? On dit “Un booléen indiquant si le Job doit être répété”. Comment peut-il être choisi quand re-planifier? J’ai essayé l’exemple, et choisi “Récurrent”, mais il ne semble pas fonctionner à nouveau, seulement une fois.
setRecurring(true)
, setTrigger(Trigger.executionWindow(10, 20))
Cela se déclenche dès que la date limite de démarrage de la fenêtre est atteinte, et les pilotes sont encouragés à exécuter le Job avant la fin de la fenêtre si possible.
3. Peut-il être protégé contre les travaux de la bibliothèque (à cause des identifiants uniques)?
Les balises de travail doivent être uniques dans votre application. Les autres applications du téléphone ont leurs propres «points de terminaison» (nom du package / nom du service). Pour voir tous les travaux planifiés / terminés pour GooglePlayDriver
veuillez utiliser:
adb shell dumpsys activity service GcmService
4. A-t-il besoin de précautions supplémentaires lors de la mise à jour de l’application (comme l’ont fait les API précédentes)? Les travaux peuvent-ils encore être programmés après une mise à jour de l’application? Test sur l’échantillon, il semble que les travaux ont complètement disparu après une mise à jour de l’application. Peut-on l’éviter?
GooglePlayDriver
ne reprogramme pas les tâches après la mise à jour des services Google Play ou de l’application. Voici un numéro ouvert pour cela. Donc pour l’instant, c’est votre responsabilité. 5. A-t-il besoin de RECEIVE_BOOT_COMPLETED au cas où je souhaiterais que le travail soit toujours planifié même au redémarrage du périphérique? L’échantillon semble l’avoir.
setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT)
Bien sûr, si vous voulez créer votre propre pilote, vous devrez vous occuper de la vie vous-même. 6. Est-il possible d’obtenir une liste de tous les travaux planifiés et de leurs informations (y compris les parameters), et d’être capable d’annuler certains / tous et même de les modifier?
7. Un travail sera-t-il supprimé lors du fonctionnement en clair des données de l’application?
8. Est-il possible de dire qu’il est préférable qu’il fonctionne dans un intervalle de temps (exemple: entre 7h00 et 8h00 du matin)? Il est mentionné “ExecutionWindowTrigger – qui spécifie une fenêtre temporelle dans laquelle le Job doit être exécuté”. Est-ce que c’est ça? Que se passe-t-il quand il manque cette fenêtre?
executionWindow(0, 60*60)
. Le travail se déroulera entre 7h00 et 8h00. windowStart – La première heure (en secondes) à laquelle le travail doit être considéré comme éligible pour s’exécuter. Calculé à partir de la planification du travail (pour les nouveaux travaux) ou de la dernière exécution (pour les travaux récurrents).
En outre, ExecutionWindowTrigger spécifie l’heure approximative. Ce n’est pas garanti que ça courrait à la fenêtre donnée. S’il manque la fenêtre, le travail sera exécuté plus tard.
9. La méthode “onStartJob” dans la classe “JobService” retourne un booléen et la description est “s’il rest du travail à faire”. . Qu’est-ce que ça veut dire? Que signifie le paramètre “needsReschedule” de la méthode “jobFinished”? Sont-ils liés les uns aux autres?
onStartJob
renvoie false, cela signifie que vous avez terminé votre travail. Pas besoin d’invoquer jobFinished
. Le RESULT_SUCCESS
est envoyé automatiquement. Si onStartJob
renvoie true, cela signifie que vous avez démarré un thread et attendu des résultats. Comme vous l’avez fait, vous devez invoquer jobFinished
pour informer les services Google Play que le travail doit être reprogrammé ou non. Si oui, le travail sera reprogrammé en fonction de RetryStrategy
.
10. Y a-t-il des ressortingctions que je devrais connaître? Par exemple les valeurs minimales et maximales pour chacune des fonctions?
onStartJob
devrait décharger le travail dans un autre thread d’exécution dès que possible. Ils fournissent un SimpleJobService
comme exemple de ce qui est attendu de vous. JobScheduler
de Lollipop. Vous devez également gérer la situation lorsque les services Google Play ne sont pas disponibles, nous devrions probablement implémenter Driver
basé sur AlarmManager
.