我想用新的 JetPack WorkManager(链接到codelabs)组件(在应用程序的沙箱分支中)替换我现有数据同步系统的作业调度方面。我现有的系统运行良好,但其中的一些新功能WorkManager
会派上用场(例如链接)。
我当前的系统使用 sharedLiveData
将正在进行的作业的进度传达给RecyclerView
观察它的任何 UI 元素(在我的情况下)(我实际上是 SwitchMappingViewModel
到 s 列表中SyncItem
)
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
等)可用于检索带有一个或多个WorkStatus
es 的 LiveData,但这些仅报告课程粒度状态(运行、成功、失败、已取消)。
向 UI 传达进度(例如“已下载 546/1234 个项目”)的推荐方式是什么?setOutputData
/getOutputData
对似乎更多地用于 s 之间的通信(Worker
链接时我需要)而不是 UI。
附件是用户打开同步状态页面(已完成 2 个项目,正在进行中)时的屏幕截图(在我的应用程序的 [测试] 版本中使用我的旧方法)。
在最终产品中,用户将能够取消任何正在进行的工作并重新发出一次性工作请求。通常这些工作会被解雇PeriodicWorkRequest
。