我想知道以下方法是否有效,我已经在堆栈溢出中使用了该方法,但是它似乎不起作用。
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;
}
我有一个Job Service,为此每15分钟执行一次,因此我正在使用Job Scheduler在任何提及的时间触发该服务。 我有一个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再次写了这个问题。任何帮助都将非常有用。