我如何知道 JobScheduler 是否正在运行?

Hel*_*oCW 7 android

在我调用代码 A 后,JobScheduler即使我关闭了 APP ,它也会继续运行。

但是一些定制的安卓系统可能JobScheduler在关闭APP的时候就清晰了。

如何检查是否以JobScheduler编程方式运行?

代码 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)
}
Run Code Online (Sandbox Code Playgroud)

代码 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))

}
Run Code Online (Sandbox Code Playgroud)

Sag*_*gar 5

您可以使用getAllPendingJobsJobScheduler 的方法。基于文档

应用程序的所有预定作业的列表。这包括当前已启动的作业以及仍在等待运行的作业。

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

如果想检查特定的 JobId 是否仍然有效,那么您可以执行以下操作:

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;
}
Run Code Online (Sandbox Code Playgroud)