从 Workmanager 更新 UI

Update UI from a Workmanager

如何从 Android WorkManager 更新 UI。

Android Workmanager 可以接收 Boolean, Integer, Long, Float, Double, String

文档说:

public Data.Builder putAll (Map<String, Object> values)

"Puts all input key-value pairs into the Builder. Valid types are: Boolean, Integer, Long, Float, Double, String, and array versions of each of those types. Invalid types throw an IllegalArgumentException."

  1. 如何传递更新 UI 的回调。
  2. 如何在没有数据库调用的情况下传递 POJO。

Result.SUCCESS 或 Result.FAILURE 不是解决方案,因为只有在工作完成后才会返回。

如果您想从服务更新 ui,您可以使用绑定服务, 检查此问题以获取更多详细信息 Android update activity UI from service

首先,WorkManager 是一个 API 可延迟后台工作。如果您希望应用程序在前台显示更新,那可能是错误的 API。 WorkManager documentation covers this.

其次,androidx.work.Data documentation 状态:

This is a lightweight container, and should not be considered your data store. As such, there is an enforced MAX_DATA_BYTES limit on the serialized (byte array) size of the payloads. This class will throw IllegalStateExceptions if you try to serialize or deserialize past this limit.

由于 WorkManager 是 Android 架构组件的一部分,一个好的解决方案是使用 LiveData 在后台作业和(最终在前台)UI.

之间传递状态更新

这显示在 WorkManager codelab.

Step 8. Tag and Display Work Status,涵盖了这一点。

对于这个问题(我使用 WorkManager 上传文件并希望监控进度,而不仅仅是结果),我使用了 EventBus。超级简单,将侦听器放在任何你想要的地方 - 在我的例子中是 MainActivity,因为我使用单个 activity 模式。