Android工作经理:我可以强制删除已完成的作业吗?

Android工作经理:我可以强制删除已完成的作业吗?,android,android-workmanager,Android,Android Workmanager,我正在我的应用程序中上载照片,并希望向用户提供上载进度。我要做的是有一个全局标记,上传\媒体\标记,并在创建OneTimeWorkRequest时使用它。这样我就可以观察WorkManager.getInstance.GetStatuseBytagUpload\u MEDIA\u标记LiveData,每当作业完成时,我都会显示完成百分比。即上传3/10照片将显示30%。然后,一旦所有10/10照片上传完毕,我会隐藏进度条。这很好用,因为它可以很容易地支持离开应用程序、返回,并且一旦应用程序在停止

我正在我的应用程序中上载照片,并希望向用户提供上载进度。我要做的是有一个全局标记,上传\媒体\标记,并在创建OneTimeWorkRequest时使用它。这样我就可以观察WorkManager.getInstance.GetStatuseBytagUpload\u MEDIA\u标记LiveData,每当作业完成时,我都会显示完成百分比。即上传3/10照片将显示30%。然后,一旦所有10/10照片上传完毕,我会隐藏进度条。这很好用,因为它可以很容易地支持离开应用程序、返回,并且一旦应用程序在停止的地方启动,您就会看到进度条

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

我注意到有一个方法OneTimeWorkRequest.keepresultsforatlestduration,但我想要的是类似于keepresultsforatmosturation或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],它修复了几个bug并引入了新功能。您可能感兴趣的一个功能是:

添加了WorkManager.pruneWork以从内部数据库中删除已完成的作业
在向谷歌提交问题后,他们说会有一个名为Alpha03中的pruneWork的函数。

谢谢你的回复。这并不能解决我的问题,但我的问题更多的是功能请求,而不是任何东西。@AndrewMarshall你不应该将功能请求放在Stackoverflow上,因为这不是Stackoverflow的目的。把它放在G上oogle的网站。