Android 工作管理器:我可以强制修剪已完成的作业吗?



我正在我的应用程序中上传照片,并希望向用户提供上传进度。 我要这样做的方法是有一个全局标签,UPLOAD_MEDIA_TAG并在我创建OneTimeWorkRequest时使用它。 这样我就可以观察 LiveDataWorkManager.getInstance().getStatusesByTag(UPLOAD_MEDIA_TAG),每当作业完成时,我都会显示完成百分比。(即上传 3/10 照片将显示 30%(。然后,一旦上传了所有10/10照片,我将隐藏进度条。 这很好用,因为它很容易支持离开应用程序,回来,一旦应用程序在他们离开的地方启动,你就会看到进度条。

问题在于,一旦所有 10/10 作业都完成并标记为已完成,这些作业将一直存在,直到 WorkManger 修剪它们。因此,如果用户再上传 5 张照片,LiveData 将返回 15 个状态而不是 5 个状态,从而抛弃百分比计算。

我注意到有一个方法OneTimeWorkRequest.keepResultsForAtLeast(duration)但我想要的是类似keepResultsForAtMost(duration)WorkManager.getInstance().forcePrune()的方法,可以从数据库中清理所有已完成的作业。

任何帮助都会很棒!

在向Google提交问题后,他们说将有一个函数调用,pruneWork在Alpha03中。

从 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(( 以从内部数据库中删除已完成的作业

相关内容

  • 没有找到相关文章