我正在尝试学习如何将android的WorkManager与Kotlin一起使用,但我很难弄清楚如何从一个没有设置大小的OneTimeWorkRequests列表中按顺序运行一组请求。
首先,我有一个OneTimeWorkRequests列表,我使用
val requestList: MutableList<OneTimeWorkRequest> = ArrayList()
创建每个条目并将其添加到此列表中,其内容沿着如下:
val dataBuilder = Data.Builder()
val data = dataBuilder.putString("key", "data").build()
val request = OneTimeWorkRequest.Builder(MyWorker::class.java).setInputData(data).setInitialDelay(10, TimeUnit.SECONDS).build()
requestList.add(request)
// Each entry has different data and an initial delay
我知道,通常,如果我们想使用WorkManager按顺序运行工作,我们会执行类似以下的操作:
val workManager = WorkManager.getInstance(context)
workManager.beginWith(request1).then(request2).then(request3).then(request4).enqueue()
但我的问题是列表中的请求数没有设置,所以我需要的“then”调用数是未知的。我想创建这个列表,然后运行一个循环,用workManager创建序列,但这似乎是不可能的,因为“beginWith”和“then”调用似乎需要同时调用。MyWorker类所做的唯一一件事就是打印出包含数据的日志,因此这一部分一点也不复杂。
那么,是否有一种方法可以使用WorkManager来完成这一任务呢?或者,我是否应该尝试使用其他方法来实现一系列事件的发生呢?如果有任何帮助,我们将不胜感激。谢谢!
3条答案
按热度按时间cclgggtu1#
查看文档:https://developer.android.com/topic/libraries/architecture/workmanager/advanced#chained
开个玩笑,但我能通过查看文档来了解这一点。重要的部分隐藏在评论中
但这只是你想要的答案的一部分,你会想做这样的事情。
sqyvllje2#
我也有同样的问题,也许你可以让你的列表任务是静态的,并开始下一个任务时,成功的最后一个。
9gm1akwq3#
这是我用Java实现的代码,任何需要它的人都可以使用
1.将您的
WorkRequests
添加到List
(我使用的是ArrayList
)1.然后构建第一个
WorkRequest
,它将返回WorkContinuation
对象1.使用该对象对更多的
WorkRequest
进行排队,每个WorkRequest
将返回一个新的WorkContinuation
对象。每次排队将返回一个新的WorkContinuation
对象,并将下一个对象添加到该对象中1.终于
enqueue()
他们。