【问题标题】:Download multiple files in parallel like whats app in Android并行下载多个文件,如 Android 中的应用程序
【发布时间】:2015-10-18 03:20:59
【问题描述】:

我已经知道使用服务/意图服务我们会在后台下载多个文件。但是这个问题还有一个更复杂的问题需要解决。

我必须在不同的活动中并行下载多个视频/图像,例如什么应用程序。我在什么应用程序中看到我们可以开始下载,然后我们可以在不同的屏幕上移动或按主页按钮等。但是当我们再次回到该屏幕时,下载仍在继续并显示更新的进度。

像上面一样,有 4 个活动,用户开始在活动和 A 上下载 ABC.mp4,然后转到活动 B。然后转到 C 并开始下载视频/图像。如果用户回到 A 并且我想显示该 ABC.mp4 文件的进度,即下载了多少以及其他活动的情况相同。

请让我知道您的服务或任何其他方式,以便我可以使用下载文件的更新值更新 UI。任何帮助表示赞赏。

【问题讨论】:

  • 在执行器上执行的 AsyncTasks 怎么样?为每个要下载的文件生成一个。
  • @michael 是的,你是对的,但是如何在哪个活动上维护哪个文件的异步任务,然后也显示它的进度。

标签: android service android-service whatsapp


【解决方案1】:

这是我的建议:

不久前我也做过同样的事情,但使用的是 Pdf 文件。首先,您需要选择一个好的 Http 客户端库来执行下载,并忘记如果您自己执行此操作将遇到的所有与下载相关的问题。我推荐你使用Ion librabry,它有很多有用的功能,比如取消下载、附加回调以查看下载进度、知道下载是否成功、失败等。

其次,你显然需要一个在后台运行的服务,你可以通过制作自己的服务来做到这一点,而且很重要的是,android清单中的服务进程名称像android:name="com.company.app.services.MyService"而不像android:name=":MyRemoteService"这样做您将确保该服务将一直在后台运行(请记住,操作系统可以并且会在必要时终止该服务,但是当资源再次可用时该服务将重新启动)。

第三,要保持更新显示这些文件的所有视图、自定义视图、活动、片段等,您需要从您的服务中触发BroadcastReceivers。请记住,这样做您不能使用LocalBroadcastReceiver,因为您的服务有自己的进程独立于您的应用程序。

请记住:

1) 无需显式使用 Activity,您可以在任何您认为合适的地方注册您的广播。 RecyclerAdapter(最有可能)、Fragment 或 Activity。

2) 通信 App/Service 是通过 Intents 完成的,因此您与 Service 之间发送和接收的所有数据都必须是 Serializable

3) 您可以针对不同的情况(错误、失败、成功、进度等)使用几种不同类型的广播,或者您可以只使用一种并发送enum,通过当你从你的服务中触发广播时的 Intent 捆绑

希望对你有帮助,如果有任何疑问,请告诉我。

【讨论】:

  • 我会附上一张基本拱门的图片
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多