在我调用代码A后,即使关闭APP,JobScheduler
也会继续运行。
但是当关闭APP时,某些自定义Android系统可能会清除JobScheduler
。
如何检查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)
}
代码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))
}
答案 0 :(得分:2)
您可以使用JobScheduler的getAllPendingJobs
方法。基于documentation:
所有应用预定作业的列表。这包括工作 目前开始以及那些仍在等待运行的人。
public static boolean isJobSchedulerRunning(final Context context) {
final JobScheduler jobScheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE );
return jobScheduler.getAllPendingJobs().size() > 0;
}
如果想检查特定的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;
}
答案 1 :(得分:0)
运行Adb命令
adb shell dumpsys jobscheduler
它将显示已安排的作业列表,您可以识别自己的任务
答案 2 :(得分:0)
由于您知道工作ID,因此可以直接检查工作是否已安排:
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
boolean isScheduled = jobScheduler.getPendingJob(JOB_ID) != null;
if (isScheduled) {
// Your job is scheduled!
}
此方法仅适用于API级别24。有关更多信息,请参见getPendingJob(int)。