2

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

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

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

任何帮助都会很棒!

4

2 回答 2

0

在 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() 以从内部数据库中删除已完成的作业
于 2018-06-03T02:29:55.060 回答
0

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

于 2018-06-08T17:25:27.417 回答