我正在使用WorkManager来安排定期和一次性工作,并且用相同的标签标记所有工作,以便以后识别:
| tac | sed 's/^/pick /'
随着各种工作项目的排队,在将来的不同时间,我想查询一种工作队列,以确定 next 工作何时计划为此特定标签运行({{ 1}})。是的,我知道这不是确切的,并且会受到“打etc睡”等的影响,但是知道在没有其他因素的情况下该工作何时可以运行还是很有用的。
我知道如何查询工作队列并按如下方式挑选排队的工作项,但是我不确定如何知道每个工作项计划在什么时间运行:
workRequestBuilder.addTag("mywork");
答案 0 :(得分:1)
我发现只有两种方法可以“解决”此问题:
要求
不要使用定期工作!始终使用OneTimeWorkRequest
手动安排下一次定期工作。
解决方法1:
WorkRequest
时,您将呼叫setInitialDelay
。排队请求后,您可以获取它的ID =>将此ID与执行时间(可能还有策略信息以及您想要的任何信息)一起保存在数据库中,然后您始终可以查询数据库并获取下一个执行时间WorkRequest
时,请将其从数据库中删除,然后以OneTimeWorkRequest
的方式手动安排下一个“定期”任务解决方法2:
WorkRequests
添加2个自定义标签,例如“ HasRunAt”和“ RunAt:TIME_TO_RUN” WorkInfos
一样获得所有WorkManager.getInstance().getWorkInfosByTag("HasRunAt")
并检查其标签并解析以“ RanAt:”开头的标签。结论
没有哪种解决方案是美好的,我也想拥有以下能力:
WorkInfo
InputData
获取WorkInfo
-然后,您可以将要访问的所有额外信息放入该数据,然后从那里获取...