我想用新的JetPack WorkManager(链接到codelabs)组件(在应用程序的沙箱分支中)替换现有数据同步系统的作业调度方面。我现有的系统运行良好,但WorkManager
的一些新功能会派上用场(例如链接)。
我当前的系统使用共享的LiveData
将正在进行的作业的进度传达给任何UI元素(在我的情况下是RecyclerView
)观察它(我实际上是在ViewModel
中将SwitchMapping转换为SyncItem
s列表)
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,但这些只报告一个课程粒度状态(运行,成功,失败,取消)。
推荐进展的方式是什么(例如'546/1234项下载')到用户界面? setOutputData
/ getOutputData
对似乎更多地用于Worker
s(链接时我需要)与UI之间的通信。
附件是当用户打开同步状态页面时(在2个项目已完成,正在进行中),它的外观截图(使用我的旧方法在我的应用程序的[测试]版本中)。
在最终产品中,用户将能够取消正在进行的任何作业并重新发出一次性工作请求。通常这些工作将由PeriodicWorkRequest
解雇。
最好的方法是将中间进度写入您自己的数据存储并公开LiveData<>
。我们正在考虑在未来的alpha中添加此功能。