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。
我有一个与 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。