从 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."
- 如何传递更新 UI 的回调。
- 如何在没有数据库调用的情况下传递 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.
对于这个问题(我使用 WorkManager 上传文件并希望监控进度,而不仅仅是结果),我使用了 EventBus。超级简单,将侦听器放在任何你想要的地方 - 在我的例子中是 MainActivity,因为我使用单个 activity 模式。
如何从 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."
- 如何传递更新 UI 的回调。
- 如何在没有数据库调用的情况下传递 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 throwIllegalStateExceptions
if you try to serialize or deserialize past this limit.
由于 WorkManager 是 Android 架构组件的一部分,一个好的解决方案是使用 LiveData 在后台作业和(最终在前台)UI.
之间传递状态更新这显示在 WorkManager codelab.
对于这个问题(我使用 WorkManager 上传文件并希望监控进度,而不仅仅是结果),我使用了 EventBus。超级简单,将侦听器放在任何你想要的地方 - 在我的例子中是 MainActivity,因为我使用单个 activity 模式。