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

时间:2018-06-03 01:06:39

标签: android android-workmanager

我正在我的应用中上传照片,并希望向用户提供上传进度。我打算这样做的方法是使用全局标记UPLOAD_MEDIA_TAG,并在创建OneTimeWorkRequest时使用它。这样我就可以观察WorkManager.getInstance().getStatusesByTag(UPLOAD_MEDIA_TAG) LiveData,每当作业完成时,我都会显示完成百分比。 (I.E.上传3/10张照片将显示30%)。然后,一旦所有10/10照片上传,我会隐藏进度条。这很有效,因为它可以轻松支持离开应用程序,然后返回,只要应用程序在他们停止的位置启动,您就会看到进度条。

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

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

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:0)

自alpha发布以来,由于let someToy = q.pet.favoriteToy.name print("This person's pet likes \(someToy).") 管理,因此您无法控制作业修剪。但是,您可以观察class Person { var pet = Pet () } 的生命周期以获得工作状态并采取以下必要措施:

WorkManager

注意:

使用[WorkManager 1.0.0-alpha03修复了多个错误并引入了新功能。您可能感兴趣的是:

  • 添加了WorkManager.pruneWork()以从内部数据库中删除已完成的作业

答案 1 :(得分:0)

在向Google提交问题后,他们说Alpha03中会有一个名为pruneWork的函数。