Android WorkManager:在活动处于活动状态时将数据设置为视图

Android WorkManager: Set data into view when acitivity is active

我有一个与 WorkManager 在后台运行的操作,用于从 phone 获取数据并将其发送到远程服务器。但是,我还需要 在特定 activity 视图中显示该数据,只要用户碰巧转到那个 activity。 有没有办法让我 link Worker class 具有特定的 Activity 并执行一些 UI 更改功能? (更改文本视图等)

class myWorker(appContext: Context, workerParams: WorkerParameters): CoroutineWorker(appContext, workerParams) {
    private val ctx = appContext
    override suspend fun doWork(): Result {
        // Do the work here
        withContext(Main){
            //I need to be able to get data and send to server, as well as change the UI display value on a particular activity if the user happens to be on that activity.
        }

        // Indicate whether the work finished successfully with the Result
        return Result.success()

    }

我建议使用 LiveData。 LiveData 是一个可观察的数据 class 也是 lifecycle-aware。因此,您的应用程序组件只会在它们处于活动状态时更新。

基本步骤是:

  • 创建一个 ViewModel class(如果您还没有)并添加一个 LiveData 字段,其中包含您想要保留的任何数据。 (请参阅 LiveData 概述中的说明,了解为什么这是一个好主意。)
  • 在您的 doWork 函数中根据需要更新 LiveData 对象。您可能希望在 ViewModel 中创建函数来对数据执行操作。
  • 在您的 activity 中,对 LiveData 对象调用 observe 并根据需要更新 UI。