如何同步获取WorkManager状态

时间:2018-07-27 16:32:57

标签: android synchronous

我正在使用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。

2 个答案:

答案 0 :(得分:1)

似乎已在10月11日删除了 SynchronousWorkManager

  

删除了WorkManager.synchronous()和WorkContinuation.synchronous()以及所有相关方法。在API中添加了ListenableFuture作为许多方法的返回类型。这是一个重大的API更改。

如何使用ListenableFuture:

  

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

更多信息here

答案 1 :(得分:0)

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