gpt4 book ai didi

Android 在特定时间开始运行 JobScheduler

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:39 44 4
gpt4 key购买 nike

我想在每天的特定时间启动 JobScheduler,并在 3 小时后完成。

我每 20 分钟触发一次作业,持续 3 小时,但在 JobInfo.Builder 类中没有在准确时间启 Action 业的选项。

回顾 JobInfo.Builder类概述,那里没有设置启动 JobScheduler 的时间。

显然,我不想让它运行一整天,并检查时间是否匹配,这会消耗比需要更多的电池,而且是糟糕的编程。

我正在考虑在我指定的时间运行警报并触发此作业,但这似乎有点矫枉过正。

 JobInfo.Builder builder = new JobInfo.Builder(NIGHT_SYNC_JOB_ID, 
new ComponentName(context, NightSyncDataJobService.class));

//Job starts at 11pm, and ends at 2am. Running every 20 minutes.
builder.setPersisted(true); //Job scheduled to work after reboot
builder.setPeriodic(Consts.ONE_MINUTE * 20);

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

除了触发此 JobScheduler 的 AlarmManger 之外,如果您有任何其他解决方案,我们将不胜感激。

最佳答案

我通过以下方式实现了它(没有 AlarmManager),创建了一个新的 Job(显然具有唯一的 JOB_ID),并告诉 JobScheduler 使用 setOverrideDeadline() 将其安排在将来的某个时间。

下面是一个可能有用的 fragment :

private JobInfo getJobInfoForFutureTask(Context context,
long timeTillFutureJob) {
ComponentName serviceComponent = new ComponentName(context, SchedulerService.class);

return new JobInfo.Builder(FUTURE_JOB_ID, serviceComponent)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
.setOverrideDeadline(timeTillFutureJob)
.setRequiresDeviceIdle(false)
.setRequiresCharging(false)
.setPersisted(true)
.build();
}

确保计算出您想要安排任务的正确时间偏移量,并从 JobScheduler 中删除任何现有的作业 ID。

关于Android 在特定时间开始运行 JobScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38301351/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com