1

我正在尝试创建一个重复的异步任务来使用 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());
    }
4

1 回答 1

1

您可以在作业调度程序唤醒时检查设备时间,然后在 OnStartJob 内部首先获取这样的时间

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

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

但是,android 7.0 不能保证作业调度程序会在准确的时间工作。所以选择你独特的时间更广泛。

第二个选项是警报管理器,它也适用于您的情况。有有用的解决方案; 使用 Alarmmanager 在特定时间启动服务

于 2017-06-15T15:37:45.900 回答