Après avoir appelé le code A, le JobScheduler continuera à fonctionner même si je ferme l'application.

Mais certains personnalisent le système Android peuvent être effacés JobScheduler lors de la fermeture de l'application.

Comment vérifier si le JobScheduler s'exécute par programmation?

Code A

private fun startScheduleRestore(mContext:Context){
   logError("Start Server")

   val interval=if (isDebug())
                    10*1000L
                 else
                    mContext.getInteger(R.integer.AutoRestoreInterval)*60*1000L

    val mJobScheduler = mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler

    val jobInfo = JobInfo.Builder(mContext.getInteger(R.integer.JobID), ComponentName(mContext, RestoreService::class.java))
                        .setPeriodic(interval)
                        .setPersisted(true)
                        .build()

    mJobScheduler.schedule(jobInfo)
}

Code B

private fun stopScheduleRestore(mContext:Context){
    logError("Stop Server")

    val mJobScheduler = mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
    mJobScheduler.cancel(mContext.getInteger(R.integer.JobID))

}
4
HelloCW 23 mai 2018 à 11:50

3 réponses

Meilleure réponse

Vous pouvez utiliser la méthode getAllPendingJobs de JobScheduler. Basé sur la documentation:

une liste de toutes les tâches planifiées de l'application. Cela inclut les travaux actuellement démarrés ainsi que ceux qui attendent toujours d'être exécutés.

public static boolean isJobSchedulerRunning(final Context context) {
    final JobScheduler jobScheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE );    
    return jobScheduler.getAllPendingJobs().size() > 0;
}

Si vous souhaitez vérifier si un JobId particulier est toujours valide, vous pouvez procéder comme suit:

public static boolean isJobIdRunning( Context context, int JobId) {
    final JobScheduler jobScheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

    for ( JobInfo jobInfo : jobScheduler.getAllPendingJobs() ) {
        if ( jobInfo.getId() == JobId ) {
           return true;
        }
    }

    return false;
}
3
Sagar 23 mai 2018 à 09:08

Exécuter la commande Adb

adb shell dumpsys jobscheduler

Il vous montrera la liste des travaux planifiés et vous pourrez identifier votre propre tâche

1
Aditya 23 mai 2018 à 08:55

Puisque vous connaissez votre travail IF, vous pouvez vérifier directement si le travail est planifié:

JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
boolean isScheduled = jobScheduler.getPendingJob(JOB_ID) != null;
if (isScheduled) {
    // Your job is scheduled!
}

Cette méthode ne fonctionnera qu'à partir du niveau d'API 24. Voir getPendingJob (int) pour plus d'informations.

0
YoavBZ 28 nov. 2018 à 18:29