【发布时间】:2018-11-05 14:55:45
【问题描述】:
我想用新的 JetPack WorkManager(链接到 codelabs)组件(在应用程序的沙箱分支中)替换我现有数据同步系统的作业调度方面。我现有的系统运行良好,但 WorkManager 中的一些新功能会派上用场(例如链接)。
我当前的系统使用共享的LiveData 将正在进行的作业的进度传达给观察它的任何 UI 元素(在我的情况下为 RecyclerView)(我实际上是在 ViewModel 中将 SwitchMapping 到列表中SyncItems)
data class SyncItem(
val title: String,
private var _progress: Int,
var total: Int) : BaseObservable() {
var progress: Int
@Bindable get() = _progress
set(value) {
_progress = value
notifyPropertyChanged(BR.progress)
}
}
新的WorkManager 组件有几种方法(getStatusById、getStatusesByTag 等)可用于检索具有一个或多个 WorkStatuses 的 LiveData,但这些仅报告课程粒度状态(运行、成功、失败、取消)。
向 UI 传达进度(例如“已下载 546/1234 个项目”)的推荐方式是什么? setOutputData/getOutputData 对似乎更多地用于Workers(链接时我需要)之间的通信,而不是与 UI 通信。
附件是用户打开同步状态页面(已完成 2 项,正在进行中)时的屏幕截图(在我的应用的 [测试] 版本中使用我的旧方法)。
在最终产品中,用户将能够取消任何正在进行的工作并重新发出一次性工作请求。通常这些工作会被PeriodicWorkRequest解雇。
【问题讨论】:
标签: android android-jetpack android-workmanager