La droite.
Henning et P4u144 m'ont mis sur la bonne voie pour répondre à cette question plus en détail.
Identifier tous les emplois inscrits
Identifier votre tâche avec l' adb shell dumpsys jobscheduler
commande.
Cela vous donnera une énorme sortie dans les catégories suivantes.
- Paramètres
- Enregistré XX Emplois
- La connectivité
- Alarmes
- Inactif
- Batterie
- AppIdle
- Contenu
- L'histoire de Job
- Dans l'attente de la file d'attente
La catégorie dont vous êtes le plus susceptible d'être intéressé est Inscrit XX Emplois. Cela vous indique combien d'emplois ont été programmées sur l'appareil.
Par exemple, votre paquet est - com.foo.bar.application
vous devriez voir une entrée comme ceci:
JOB #u0a93/17: eec3709 com.foo.bar.application/com.evernote.android.job.v21.PlatformJobService
u0a93 tag=*job*/com.foo.bar.application/com.evernote.android.job.v21.PlatformJobService
Source: uid=u0a93 user=0 pkg=com.foo.bar.application
JobInfo:
Service: com.foo.bar.application/com.evernote.android.job.v21.PlatformJobService
PERIODIC: interval=+15m0s0ms flex=+5m0s0ms
PERSISTED
Requires: charging=false deviceIdle=false
Network type: 2
Backoff: policy=1 initial=+30s0ms
Has early constraint
Has late constraint
Required constraints: TIMING_DELAY DEADLINE UNMETERED
Satisfied constraints: CONNECTIVITY NOT_ROAMING APP_NOT_IDLE DEVICE_NOT_DOZING
Unsatisfied constraints: TIMING_DELAY DEADLINE UNMETERED
Earliest run time: 07:23
Latest run time: 12:23
Ready: false (job=false pending=false active=false user=true)
Astuce: Utilisez adb shell dumpsys jobscheduler | grep com.foo.bar.application
pour filtrer rapidement la liste.
Maintenant, vous pouvez facilement identifier si votre travail a été enregistré avec les critères corrects.
FireBaseJobdispatcher
Si vous utilisez FirebaseJobDispatcher
lib vous pouvez utiliser
adb shell dumpsys activity service GcmService | grep com.foo.bar.debug
com.foo.bar.debug:0 v853
u0|com.foo.bar.debug: 3
(scheduled) com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="com.foo.bar.debug.job.FetchArticlesJob" trigger=window{start=10800s,end=11700s,earliest=10448s,latest=11348s} requirements=[NET_UNMETERED,DEVICE_IDLE] attributes=[PERSISTED,RECURRING] scheduled=-351s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(scheduled) com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="com.foo.bar.debug.job.FetchNotificationGroupsJob" trigger=window{start=86400s,end=129600s,earliest=86048s,latest=129248s} requirements=[NET_CONNECTED,CHARGING] attributes=[PERSISTED,RECURRING] scheduled=-351s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(scheduled) com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="com.foo.bar.debug.job.RemoveUnusedRealmArticlesJob" trigger=window{start=577980s,end=608400s,earliest=521961s,latest=552381s} requirements=[NET_ANY] attributes=[PERSISTED,RECURRING] scheduled=-56018s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(finished) [com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver:com.foo.bar.debug.job.UpdateNotificationGroupJob,u0]
(finished) [com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver:com.foo.bar.debug.job.UpdatePushTokenJob,u0]
(finished) [com.foo.bar.debug/com.firebase.jobdispatcher.GooglePlayReceiver:com.foo.bar.debug.job.FetchArticlesJob,u0]
pour vérifier si votre service a été planifié ou exécuté.
La Force de votre tâche à exécuter
Lors de la création d'un Job
, vous obtenez un JOB_ID
retournée.
Utilisez cette JOB_ID
de la force de l'exécution du travail.
Vous pouvez le faire en utilisant l' adb shell cmd jobscheduler run
de commande, (nécessite Android 7.1 ou supérieur).
Par exemple, votre paquet est - com.foo.bar.application
et de la JOB_ID
a été 1.
Vous pouvez maintenant exécuter votre tâche via adb
adb shell cmd jobscheduler run -f com.foo.bar.application 1
N'oubliez pas l' -f
option, car cela force l'exécution du travail, même si les restrictions ne sont pas respectées.
Evernote Android Travail Lib
Dernier point, mais certainement pas moins.
L'utilisation de la magnifique bibliothèque de Evernote pour cela.
Il permet de faciliter le portage de l' JobScheduler
sur le bas de l'API niveaux en utilisant soit JobScheduler
, GcmNetworkManager
ou AlarmManager
selon votre niveau API.
Edit 24/08
Même mieux d'utiliser le firebase emploi répartiteur de la bibliothèque.
Le Firebase JobDispatcher est une bibliothèque pour la planification des tâches en arrière-plan de votre application Android. Il fournit un JobScheduler-compatible API qui fonctionne sur toutes les versions récentes d'Android (API de niveau 9+) qui ont Google Play services est installé.
J'espère que cela a aidé.
Merci