Android 工作经理:我可以强制修剪已完成的工作吗?
Android Work Manager: Can I force prune the Completed Jobs?
我正在我的应用程序中上传照片,并想向用户提供上传进度。我打算这样做的方法是有一个全局标记 UPLOAD_MEDIA_TAG
并在我创建 OneTimeWorkRequest
时使用它。这样我就可以只观察 WorkManager.getInstance().getStatusesByTag(UPLOAD_MEDIA_TAG)
LiveData,每当作业完成时我都会显示完成百分比。 (即上传 3/10 的照片将显示 30%)。然后,一旦所有 10/10 照片都上传完毕,我就会隐藏进度条。这非常有效,因为它可以轻松支持离开应用程序、返回应用程序,并且一旦应用程序在他们停止的地方启动,您就会看到进度条。
问题是,一旦所有 10/10 作业完成并标记为已完成,这些作业将一直存在,直到 WorkManger 删除它们。因此,如果用户再上传 5 张照片,LiveData 将返回 15 个状态而不是 5 个,从而忽略百分比计算。
我注意到有一种方法 OneTimeWorkRequest.keepResultsForAtLeast(duration)
,但我想要的是类似 keepResultsForAtMost(duration)
或 WorkManager.getInstance().forcePrune()
的方法,可以从数据库中清除所有已完成的作业。
任何帮助都会很棒!
从 alpha 版本开始,您对作业修剪没有太多控制权,因为它由 WorkManager
管理。但是,您可以观察 WorkManager
的生命周期以获取作业状态并采取必要的操作,如下所示:
WorkManager.getInstance().getStatusById(myWork.getId())
.observe(lifecycleOwner, workStatus -> {
// Do something with the status
if (workStatus != null && workStatus.getState().isFinished()){
// Stop observing data or do other action
}
});
注:
使用 [WorkManager 1.0.0-alpha03,它修复了多个错误并引入了新功能。您可能感兴趣的是:
- 添加了 WorkManager.pruneWork() 以从内部数据库中删除已完成的作业
在使用 Google 提交问题后,他们说 Alpha03 中将有一个名为 pruneWork
的函数。
我正在我的应用程序中上传照片,并想向用户提供上传进度。我打算这样做的方法是有一个全局标记 UPLOAD_MEDIA_TAG
并在我创建 OneTimeWorkRequest
时使用它。这样我就可以只观察 WorkManager.getInstance().getStatusesByTag(UPLOAD_MEDIA_TAG)
LiveData,每当作业完成时我都会显示完成百分比。 (即上传 3/10 的照片将显示 30%)。然后,一旦所有 10/10 照片都上传完毕,我就会隐藏进度条。这非常有效,因为它可以轻松支持离开应用程序、返回应用程序,并且一旦应用程序在他们停止的地方启动,您就会看到进度条。
问题是,一旦所有 10/10 作业完成并标记为已完成,这些作业将一直存在,直到 WorkManger 删除它们。因此,如果用户再上传 5 张照片,LiveData 将返回 15 个状态而不是 5 个,从而忽略百分比计算。
我注意到有一种方法 OneTimeWorkRequest.keepResultsForAtLeast(duration)
,但我想要的是类似 keepResultsForAtMost(duration)
或 WorkManager.getInstance().forcePrune()
的方法,可以从数据库中清除所有已完成的作业。
任何帮助都会很棒!
从 alpha 版本开始,您对作业修剪没有太多控制权,因为它由 WorkManager
管理。但是,您可以观察 WorkManager
的生命周期以获取作业状态并采取必要的操作,如下所示:
WorkManager.getInstance().getStatusById(myWork.getId())
.observe(lifecycleOwner, workStatus -> {
// Do something with the status
if (workStatus != null && workStatus.getState().isFinished()){
// Stop observing data or do other action
}
});
注:
使用 [WorkManager 1.0.0-alpha03,它修复了多个错误并引入了新功能。您可能感兴趣的是:
- 添加了 WorkManager.pruneWork() 以从内部数据库中删除已完成的作业
在使用 Google 提交问题后,他们说 Alpha03 中将有一个名为 pruneWork
的函数。