4

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.

The Bat
  • 1,085
  • 1
  • 13
  • 31

0 Answers0