问题描述
-
我需要跟踪和更新从某个 Api(无法共享)获取的列表中多个文件的下载状态(开始、暂停、播放、完成),并将其更新到 RecyclerView。
-
我也得到了一个 fileId 以便可以区分每个文件。
-
我需要基于 fileId 的下载跟踪,因为下载列表也是可搜索的,这意味着项目的位置会改变,所以我们不能依赖基于位置的 ViewHolder 刷新.
-
此外,如果您出于某种原因关闭了应用程序,然后返回列表,搜索文件,它应该会显示文件下载状态。
-
现在有三个选项:
a) 基于 WorkManager 的实现(如何实现这个选项?)
b) PRDownloader(如何实现这个选项?)
c) 还是安卓的下载管理器? (需要确保我们需要在 列表中的同一时间。) -
哪个更好、更可靠?
-
哪种方法最短?
如果您有基于工作经理的代码,也有人可以分享吗?(如何 您能否将 fileId 与 workManger 的工作 ID 相关联。我是吗 需要制作一个数据库表来跟踪 Worker 的下载吗? 如何使用 workManager 中的 LiveData,如果我们可以在 ViewHolder 中 )
[参考博客/代码/回购将是最有帮助的]
解决方法
回答我自己的问题(奇怪!)。
- 我使用了 Fetch Downloader Library
- 初始化并使用“获取实例”作为单例
- 使用标签添加了下载(也许我错误地使用了标签。它应该用于一组下载。但我为每个下载使用了一个标签。但它起作用了。)
- 现在我在 ViewHolder 的 bind() 方法中做了以下操作:
- 将文件 ID 作为“标签”并删除链接到的 FetchObserver “标签”即Id使用“获取实例”的方法(//将更新 方法)
- 然后再次在“Fetch 实例”使用 Id 作为“标签”。(getDownloadsByTag() 方法)
- 如果有下载,您将收到一个下载列表,其第 0 个 element 将成为您的下载,因为我每次下载都使用一个标签 而不是团体。
- 现在再次添加 FetchObserver “标签”。
- 在 FetchObserver 的 lambda 中,更新进度和其他值。
注意:不能出于非公开目的共享代码。如果您觉得这令人困惑,可以分享一些小片段。