Scenario
Hi, I have a JobService that I launch when I come to my HomeScreen. This job service takes my requests out from my DB and execute them whenever internet is available. So even if the device is offline, I insert my transactions in my DB and whenver internet comes, my JobService executes those transactions.
Problem
The Problem is that I come to my HomeScreen from a number of screens. So everytime I come to HomeScreen, I starts my JobService again. So if I came to my HomeScreen three time before internet comes, now three different services are running for same task. So I wanted to check if the service is already running, I won't start one.
What I have Tried
The Code of starting my JobService is very simple. I wrote a method to start it and call it in 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);
}
I call executeQueue
in onCreate()
.
I searched on StackOverflow and found this link:
How to check JobService is running or not in android?.
So I now have this method in my HomeScreen to check if my JoService is running:
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 ;
}
But in this method, It never lists my JobService running and I get false
everytime, Hence again running into my same problem of multiple instances of the JobService.
I hope I made my question clear.