1

I'm need execute service every time (1 minute). My JobScheduler execute a single time and don't execute anymore.

What's problem ?

JobNewClientsService is declarated on Manifest and I call this class in my MainActivity.

public class JobNewClientsService extends JobService {
private final String JOB_NAME = "Job_Service";
private Context mContext;
private AsyncOrderNewCommand asyncOrderNewCommand;

@Override
public boolean onStartJob(final JobParameters params) {
    Log.d(JOB_NAME, "StartJob");
    mContext = this;
    getNewCarts(params);
    return true;
}

@Override
public boolean onStopJob(final JobParameters params) {
    if (asyncOrderNewCommand != null) {
        asyncOrderNewCommand.cancel(true);
    }
    Log.d(JOB_NAME, "JobStop");
    return false;
}

public void showNotification() {
    Log.d(JOB_NAME, "Notification");
}

public void getNewCarts(final JobParameters params){
    asyncOrderNewCommand = new AsyncOrderNewCommand(new AsyncTaskException.AsyncTaskExceptionListener() {
        @Override
        public void onSuccess(Object result) {
            final List<Cart> cartList = (List<Cart>) result;
            if(cartList!=null && cartList.size()>0){
                showNotification();
                Log.d(JOB_NAME, "JobFinished");
                jobFinished(params, false);
            }
        }

        @Override
        public void onError(ApplicationException exception) {
            Log.d(JOB_NAME, "JobFinished");
            jobFinished(params, false);
        }
    });
    final CartsOrderDirectionCommand cartsOrderDirectionCommand = new CartsOrderDirectionCommand(CartsOrderDirectionCommand.OrderDirection.ASC);
    asyncOrderNewCommand.execute(cartsOrderDirectionCommand);
}

}

And Instantiate my job

        JobScheduler jobScheduler =
            (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Log.d("SDK_VERSION","> ANDROID N");
        return jobScheduler.schedule(new JobInfo.Builder(1, new ComponentName(getPackageName(), JobNewClientsService.class.getName()))
                .setMinimumLatency(time)
                .setOverrideDeadline((long)(time * 1.05))
                .setPersisted(true)
                .build());
    } else {
        Log.d("SDK_VERSION","< ANDROID N");
        return jobScheduler.schedule(new JobInfo.Builder(1, new ComponentName(getPackageName(), JobNewClientsService.class.getName()))
                .setPeriodic(time)
                .setOverrideDeadline((long)(time * 1.05))
                .setPersisted(true)
                .build());
    }
user3075588
  • 123
  • 1
  • 7
  • `JobScheduler` does not execute jobs that quickly. AFAIK, the minimum period is 15 minutes, not 1. – CommonsWare May 22 '17 at 16:51
  • I know this is old but ...take a look at this...https://stackoverflow.com/questions/39641278/job-scheduler-in-android-n-with-less-then-15-minutes-interval/47760856#47760856 – MRah Apr 19 '18 at 21:21

1 Answers1

0

I know it's been a while since this was posted, but in case someone else is running into this problem: when you call jobFinished method, you need to send true, since you need to specify that you want to reschedule the job once is finished.