【问题标题】:Update UI from a Workmanager从 Workmanager 更新 UI
【发布时间】:2018-09-18 12:46:22
【问题描述】:

如何从 Android WorkManager 更新 UI。

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

文档说:

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

“将所有输入键值对放入 Builder。有效类型包括:Boolean、Integer、Long、Float、Double、String 以及每种类型的数组版本。无效类型会引发 IllegalArgumentException。”

  1. 如何通过回调来更新 UI。
  2. 如何在没有 DB 调用的情况下传递 POJO。

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

【问题讨论】:

标签: android android-jetpack android-workmanager


【解决方案1】:

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

第二,androidx.work.Datadocumentation 状态:

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

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

这显示在WorkManager codelab.

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多