我想知道以下方法是否有效,我在堆栈溢出本身中有这个方法,但它似乎不起作用。
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
我有一个作业服务,它将每 15 分钟执行一次,我正在使用作业调度程序在提到的任何时间触发服务。我有一个方法作为 executeService() 如下:
public JobScheduler initJob(Context context){
if(jobScheduler == null){
jobScheduler = (JobScheduler)context.getSystemService(JOB_SCHEDULER_SERVICE);
}
return jobScheduler;
}
public void executeService(){
initJob(this);
ComponentName jobService = new ComponentName(this.getPackageName(), OfflineService.class.getName());
JobInfo jobInfo = new JobInfo.Builder(2,jobService).
setPersisted(true).
setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).
setPeriodic(millisecondsQueue).
build();
int jobId = jobScheduler.schedule(jobInfo);
}
现在每次用户来到 MainActivity 时都会调用这个 executeService(),在 MainActivity 的 onResume 中我已经进行了如下检查
if(!isMyServiceRunning(OfflineService.class)){
executeService();
}
如果我的服务已经被触发,那么在我回到 MainActivity 之后,该方法isMyServiceRunning()
总是返回 false。
我已经完成了与此相关的所有问题的答案,但我最终再次写了这个问题,我使用的是 Android OS Nougat。任何帮助都会很棒。