Android JobInfo构建器每天都在进行

时间:2016-07-27 16:00:22

标签: android android-jobscheduler

我尝试使用JobScheduler和 JobService 创建定期异步任务来调用Web服务。但我的想法是每天尝试执行一次这个任务,并且总是在同一时间执行。甚至可以让用户更新任务启动日期的小时。

JobInfo.Builder 是否支持此功能?因为我正在使用" setPeriodic",但我不认为这是可行的。

我应该更好地使用 AlarmManager 来实现此功能吗?

这是现在调用服务的代码:

private void launchCheckShowStatusJob(){
        ComponentName serviceComponent = new ComponentName(this, CheckShowsStatusService.class);
        JobInfo.Builder builder = new JobInfo.Builder(jobId++, serviceComponent);
        builder.setMinimumLatency(0);
        builder.setPeriodic(5*1000); //Every 5 minutes, can this be use to set a dayly task?
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); //Require any network
        builder.setRequiresCharging(false);

        JobScheduler jobScheduler = (JobScheduler) getApplication().getSystemService(Context.JOB_SCHEDULER_SERVICE);
        jobScheduler.schedule(builder.build());
    }

1 个答案:

答案 0 :(得分:0)

您可以检查作业调度程序唤醒时的设备时间,然后在OnStartJob内部获取第一个时间

public override bool OnStartJob (JobParameters args)
    { if (devicetime == (that unique time)){ ... } }

然后你就可以做任何你想做的事。

然而,android 7.0并不能保证jobscheduler会在确切的时间工作。所以选择你的独特时间更广泛。

第二个选项是Alarm Manager,它也适用于您的情况。 有用的解决方案; Using Alarmmanager to start a service at specific time