从Workmanager更新UI

8

如何从Android WorkManager更新UI。

Android WorkManager可以接收布尔值,整数,长整型,浮点型,双精度型和字符串。

文档说明:

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

将所有输入键值对放入Builder中。有效类型为:布尔值,整数,长整型,浮点型,双精度型,字符串以及每种类型的数组版本。无效类型会抛出IllegalArgumentException异常。

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

Result.SUCCESS或Result.FAILURE并不是解决方案,因为仅在工作完成时返回它们。


https://medium.com/mindorks/lets-work-manager-do-background-processing-58356e1ab844 - Madhur
进度报告现在可以原生地使用了。请参见此答案 - Paulo Pereira
可能是[显示运行WorkManager工作器的详细进度]的重复内容(https://dev59.com/Wqvka4cB1Zd3GeqPxLA0)。 - Paulo Pereira
只使用WorkManager来执行后台密集任务(不更新UI)。使用runOnUiThread(主线程)来更新您的视图。 - 6rchid
3个回答

7
首先,WorkManager是一个用于可延迟后台任务的API。如果您期望应用程序在前台显示更新,则可能使用了错误的API。WorkManager文档涵盖了这一点
其次,androidx.work.Data文档指出:

这是一个轻量级容器,不应视为数据存储。因此,在有效载荷的序列化(字节数组)大小上强制实施MAX_DATA_BYTES限制。如果您尝试序列化或反序列化超过此限制,此类将抛出IllegalStateExceptions

由于WorkManager是Android架构组件的一部分,因此一个好的解决方案是使用LiveData在后台作业和(最终在前台的)UI之间传递状态更新。
这在WorkManager codelab中展示。

第8步。标记和显示工作状态,涵盖了这一点。


0

对于这个问题(我使用WorkManager上传文件,想要监控进度而不仅仅是结果),我使用了EventBus。非常容易,在任何你想要的地方放置监听器 - 在我的情况下是MainActivity,因为我使用单一活动模式。


-1

请查看:https://developer.android.com/reference/androidx/work/WorkManager https://developer.android.com/topic/libraries/architecture/workmanager/ - D-D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接