WorkManager是一个库,用于将保证在满足其约束后执行的工作排队。
因此,在浏览了Constraints类之后,我没有找到任何函数来为工作添加时间约束。例如,我想在早上8:00am开始执行一项工作(该工作可以是OneTimeWorkRequest或PeriodicWorkRequest两种类型中的任何一种)。我如何使用WorkManager添加约束来调度这项工作?
WorkManager是一个库,用于将保证在满足其约束后执行的工作排队。
因此,在浏览了Constraints类之后,我没有找到任何函数来为工作添加时间约束。例如,我想在早上8:00am开始执行一项工作(该工作可以是OneTimeWorkRequest或PeriodicWorkRequest两种类型中的任何一种)。我如何使用WorkManager添加约束来调度这项工作?
8条答案
按热度按时间fcg9iug31#
遗憾的是,您目前无法在特定时间安排工作。如果您有时间紧迫的实施,则应使用AlarmManager,通过setAndAllowWhileIdle()或setExactAndAllowWhileIdle(),将可在低电耗模式下触发的闹钟设置为。
您可以使用
WorkManager
计划工作,初始延迟一次或定期执行,如下所示:创建辅助类:
则按如下方式调度
OneTimeWorkRequest
:您可以按如下方式设置附加约束:
然后创建使用这些约束的OneTimeWorkRequest
可按如下方式创建周期性工作请求:
这将创建一个PeriodicWorkRequest,以便每12小时定期运行一次。
np8igboo2#
PeriodicWorkRequests现在支持2.1.0-alpha 02版本的初始延迟。您可以使用PeriodicWorkRequest.Builder上的setInitialDelay方法来设置初始延迟。
每天上午8:00的调度示例。这里我使用joda time library进行时间操作。
b09cbbtk3#
到目前为止,使用
PeriodicWorkRequest
还不可能获得精确的时间。一个丑陋的变通方法是使用一个
OneTimeWorkRequest
,当它触发时,用新的计算周期设置另一个OneTimeWorkRequest
,依此类推。qnyhuwrf4#
我可能有点晚了,但无论如何,我这样做是为了在给定的时间安排一个工作请求(有一个可选的短延迟)。你只需要从TimePicker获得时间:
slhcrj9b5#
所有答案现在都已过时,升级到WorkManager 2.1.0-alpha 02(或更高版本)setInitialDelay()方法,该方法过去仅适用于OneTimeWorkRequest,但现在也支持PeriodicWorkRequest。
PeriodicWorkRequests现在支持初始延迟。可以使用PeriodicWorkRequest.Builder上的setInitialDelay方法设置初始延迟
快速示例:
eivgtgni6#
您可以使用Evernote中的AndroidJob
以及通知创建器
然后在应用程序类中启动
Gradle依赖关系为
41zrol4v7#
如果您想为PeriodicWorkRequest设置初始延迟,我在这里给出了解决方案:
在Android中为周期性工作管理器设置初始延迟
camsedfj8#
我试过OneTimeWorkRequest,但是它很脆弱(有时候才能工作),所以我们不应该依赖它。AlarmManager是一个更好的选择。