方案
您好, 当我来到我的HomeScreen时,我有一个JobService。这个工作服务从我的数据库中取出我的请求,并在互联网可用时执行它们。因此,即使设备处于脱机状态,我也会在我的数据库中插入交易,当互联网到来时,我的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上搜索并找到了这个链接:
How to check JobService is running or not in 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的多个实例的同样问题。
我希望我明白我的问题。