WorkManager是一个库,用于对满足其约束后保证执行的工作进行排队。
因此,在查看了Constraints类之后,我还没有找到任何函数来为工作添加时间约束。例如,我希望在早上8:00AM开始执行一个工作(该工作可以是OneTimeWorkRequest或PerioadWorkRequest两种类型中的任何一种)。如何添加约束以使用WorkManager调度此工作。
不幸的是,您现在不能在特定的时间安排工作。如果您有时间关键的实现,那么您应该使用AlarmManager设置警报,通过使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()可以在打瞌睡时触发警报。
您可以使用workmanager
安排一个工作,初始延迟一次,也可以定期执行它,如下所示:
创建员工类:
public class MyWorker extends Worker {
@Override
public Worker.WorkerResult doWork() {
// Do the work here
// Indicate success or failure with your return value:
return WorkerResult.SUCCESS;
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setInitialDelay(<duration>, <TimeUnit>)// Use this when you want to add initial delay or schedule initial work to `OneTimeWorkRequest` e.g. setInitialDelay(2, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(mywork);
// Create a Constraints that defines when the task should run
Constraints myConstraints = new Constraints.Builder()
.setRequiresDeviceIdle(true)
.setRequiresCharging(true)
// Many other constraints are available, see the
// Constraints.Builder reference
.build();
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(myConstraints)
.build();
WorkManager.getInstance().enqueue(mywork);
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 12, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(periodicWork);
问题内容: 从我可以看到,Gearman不支持计划的作业或延迟的作业。我当时想也许可以先将计划的作业排入队列,然后在该时间段到期后将其添加到Gearman队列中。 任务是持久的,因为它们以文件形式写入服务器的假脱机目录中的目录。因此,唯一的瓶颈可能是将任务添加到Gearman队列的简单脚本,因为它无法在服务器之间分布。将其传递给Gearman来处理实际的工作意味着我可以进行适当的工作记录等。 这是
问题内容: 我的Java Scheduler有一个问题,我的实际需要是我必须在特定时间启动我的进程,并且我将在特定时间停止,我可以在特定时间启动我的进程,但是我不能在特定时间停止我的进程,如何指定进程在调度程序中运行多长时间(在这里我不会放),任何人对此都有建议。 问题答案: 您可以使用带有2个计划的计划,一个计划运行任务,另一个计划终止任务-参见下面的简化示例:
问题内容: 我研究了,但是示例仅涉及使其重现。我正在寻找一种类似的功能,例如说“每个星期一的凌晨1点执行此任务”的功能。 问题答案: 感谢Patrick Altman,最近发布的1.0.3版现在支持此功能。 例:
问题内容: 我研究了,但是示例仅涉及使其重现。我正在寻找一种类似的功能,例如说“每个星期一的凌晨1点执行此任务”的功能。 问题答案: 感谢Patrick Altman,最近发布的1.0.3版现在支持此功能。 例: 请参阅更改日志以获取更多信息: http://celeryproject.org/docs/changelog.html
我们使用Java计时器(Java1.7)来安排一些打印工作。无论DST如何,我们都希望作业在每天的特定时间打印。目前,如果我们将作业设置为打印在4:00 AM,期间为24小时,它将正确打印直到DST日。在秋季夏令时,印刷时间是凌晨3点,而不是4点。我怎样才能解决这个问题?我们希望它在一年中的每一天的特定时间打印。
如何: 在几个月的特定日期安排工作? 大约有10天。 其次是有一个模拟cron的工具,这样你就可以传递日期/时间,工具会告诉你是否触发了cron触发器