如何同步获取WorkManager状态



我正在使用WorkManager Alpha 05。

我正在开发一种服务,它可以根据其他应用程序的需求将任务排入队列。

它有两种方法:

  1. createTask(创建一个新任务,给定一个名称和一组数据,返回和ID(
  2. checkTaskStatus(应用程序向给定ID的服务询问任务的状态(

通信是通过使用消息的绑定服务完成的。这意味着客户端和服务都有正确的实现来传递信息。

方法1运行良好。

我对方法2有问题。

WorkManager.getInstance().getStatusById(taskID)
.observe(LifecycleOwner, Observer {
status -> if (status !=null){
val myResult = status.state.toString()
statusString = myResult
Log.d("Task Status",myResult)
}
})

观察者正在正确地记录状态,但我无法将该消息发送回客户端。有没有办法以同步的方式检查状态?

我真的不需要把任务附加到LiveData上。

SynchronousWorkManager似乎已于10月11日被删除:

删除了WorkManager.synchronouss((和WorkContinuation.synchronous((以及所有相关方法。添加了ListenableFuture作为API中许多方法的返回类型。这是一个突破性的API变化。

如何使用ListableFuture:

您现在可以使用ListenableFutures同步获取和观察。例如,WorkManager.enQUE((用于返回void;它现在返回一个ListableFuture。操作完成后,可以调用ListenableFuture.addListener(Runnable,Executor(或ListenableFuture.get((来运行代码。

更多信息可在此处找到。

WorkManager实例有一个同步方法,它返回SynchronousWorkManager,这将为您提供一组执行同步操作的方法。考虑到这是为了在后台线程中使用。

最新更新