9

I am trying to use JobScheduler to schedule a job per 3 seconds. I have made my Job.Builder ready, but still when I schedule the job, onStartJob() is not getting called.

I am not sure what I am missing please help me. JobBuilder:

ComponentName componentName = new ComponentName(this,JobSchedulerService.class);

JobInfo.Builder builder = new JobInfo.Builder(0,componentName)
                    .setPeriodic(5 * 1000);

JobScheduler jobScheduler = (JobScheduler) getBaseContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
int id = jobScheduler.schedule(builder.build());


Log.i("Service","ID is :"+id);

Inside JobService,

public class JobSchedulerService extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        Message message = new Message();
        message.what = Utils.JOB_SCHEDULER_WHAT;
        message.obj = jobParameters;
        handler.sendMessage(message);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        return false;
    }

    private final Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            JobParameters jobParameters = (JobParameters)msg.obj;
            Log.i("Service:","ServiceID:"+jobParameters.getJobId());
        }
    };
}

Please let me know how to get this done.

Rohit
  • 2,646
  • 6
  • 27
  • 52
  • *onStartJob() is not getting called* how do you know that – Tim Jan 16 '18 at 15:11
  • I put debug over there and there is a log inside handler which is not getting printed also earlier I had a log inside the method which was not printing so I concluded – Rohit Jan 16 '18 at 15:13
  • Do you have `JobSchedulerService` defined in your manifest? – Gary99 Jan 16 '18 at 15:43
  • Yes else it will give exception if I do not do so – Rohit Jan 16 '18 at 15:56
  • 1
    Minimum periodic interval for the job scheduler is 15 minutes while you have 5 seconds. See this post: https://stackoverflow.com/questions/48248172/jobscheduler-not-repeating-job/48269482 – Steve Miskovetz Jan 16 '18 at 17:20

1 Answers1

11

Job scheduler has a minimum of setPeridic value of 15 minutes, so if you pass in less than 15 minutes (like in your case), jobScheduler just clamps up your periodic value to 15 minutes. Consider waiting 15 minutes or use setOverrideDeadline(long). see https://catinean.com/2014/10/19/smart-background-tasks-with-jobscheduler/

Tise
  • 111
  • 4