JobScheduler setPeriodic永远不会被调用

Roh*_*hit 6 android android-jobscheduler

我试图用来JobScheduler每3秒安排一次作业。我已经做好了Job.Builder准备,但是当我安排工作时,onStartJob()仍然没有接到电话。

我不确定我缺少什么,请帮助我。 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);
Run Code Online (Sandbox Code Playgroud)

里面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());
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

请让我知道如何完成此操作。

小智 7

Job Scheduler的最小setPeridic值为15分钟,因此,如果您经过的时间少于15分钟(如您的情况),jobScheduler只会将您的定期值限制为15分钟。考虑等待15分钟或使用setOverrideDeadline(long)。参见https://catinean.com/2014/10/19/smart-background-tasks-with-jobscheduler/

  • 一个建议,不要将最小周期值硬编码为15分钟。使用api_24添加的JobInfo.getMinPeriodMillis()进行检索。 (3认同)