设想
嗨,我有一个 JobService,当我来到我的 HomeScreen 时会启动它。这项工作服务从我的数据库中取出我的请求,并在互联网可用时执行它们。因此,即使设备处于脱机状态,我也会将我的事务插入我的数据库中,每当互联网出现时,我的 JobService 都会执行这些事务。
问题
问题是我从多个屏幕来到我的 HomeScreen。所以每次我来到 HomeScreen,我都会再次启动我的 JobService。因此,如果我在互联网出现之前三次访问我的 HomeScreen,那么现在三个不同的服务正在为同一个任务运行。所以我想检查服务是否已经在运行,我不会启动一个。
我试过的
启动我的 JobService 的代码非常简单。我写了一个方法来启动它并调用它OnCreate()
public JobScheduler initQueue(Context context){
if(jobScheduler==null){
jobScheduler = (JobScheduler)context.getSystemService(JOB_SCHEDULER_SERVICE);
}
return jobScheduler;
}
public void executeQueue(){
initQueue(this);
ComponentName jobService = new ComponentName(this.getPackageName(), OfflineQueueService.class.getName());
JobInfo jobInfo = new JobInfo.Builder(2,jobService).
setPersisted(true).
setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).
build();
jobScheduler.schedule(jobInfo);
}
我打电话executeQueue
进来onCreate()
。我在 StackOverflow 上搜索并找到了这个链接:
如何检查 JobService 是否在 android 中运行?.
所以我现在在我的 HomeScreen 中有这个方法来检查我的 JoService 是否正在运行:
public static boolean isJobServiceOn( Context context ) {
JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;
boolean hasBeenScheduled = false ;
List<JobInfo> list =scheduler.getAllPendingJobs();
for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
if (jobInfo.getId() == 2 ) {
hasBeenScheduled = true ;
break ;
}
}
return hasBeenScheduled ;
}
但是在这种方法中,它永远不会列出我正在运行的 JobService 并且我false
每次都得到,因此再次遇到我的 JobService 多个实例的相同问题。
我希望我把我的问题说清楚了。