WorkManager:多个工作器或一个长时间运行的工作者。

3
我有一个任务,需要上传照片(可以是一张照片,也可以是50或100张),上传完成后显示通知。API仅支持一次上传一张照片,并且如果上传成功或失败,我需要更新UI。
显然,我的想法是创建一个服务,但由于Android现在建议使用WorkManager来执行前台/后台工作,因此我开始调查Workers和WorkManager。
我想听听社区对以下问题的意见:
考虑到上述要求,您更喜欢哪种方法:
1. 创建一个单一的长时间运行的Worker,按顺序完成所有上传,然后在完成时创建通知;或者
2. 有一个Worker专门上传单个照片,并为每个图像上传创建一个OneTimeWorkRequest和一个独立的通知Worker。
例如:
workManager
        .beginUniqueWork(workUniqueId, ExistingWorkPolicy.REPLACE, uniqueUploadPhotoWorkRequestList)
        .then(notificationWorkRequest)
        .enqueue()
1个回答

2

你需要问自己:

我正在做什么工作?

输入参数是什么?

输出参数是什么?

这是否类似于:

  • 我想上传图片。
  • 我的输入是某个目录。
  • 我的输出是上传完成的通知。

听起来更像是一个单一的工作。为什么要费那么多功夫呢?

但同时要考虑如果工作被中断会发生什么。那么你就会面临“半成品”这样的情况,所以你需要自己管理它。有了一个图像队列,你可以从头开始上传,这样就简单得多。

但这也取决于另一端的服务器。它如何理解分块上传。它会保留多长时间的块以便恢复上传。

你应该自己写一些这样的东西。优缺点。大量数据,当你看到时,你就会有你的答案。如果你愿意,你可以买一只橡皮鸭。但现在你的问题看起来更像是你与我们分享的“想法”。


谢谢你的回答。我选择了多个工作线程来更好地控制每个文件上传。WorkManager为我提供了所有必要的API,以便我能够以整洁的方式执行任务。每个工作线程都继承自协程工作线程,并在IO上进行调度,因为它具有有限的线程池。 - Karim Fikani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接