我已经知道使用服务/意图服务我们下载多个文件在背景中。但这个问题还有一个更复杂的问题需要解决。
我必须在不同的活动中并行下载多个视频/图像,例如 Whatsapp。我在什么应用程序中看到我们可以开始下载,然后我们可以在不同的屏幕上移动或按主页按钮等。但是当我们再次移回该屏幕时,下载仍然继续并显示更新的进度。
与上面一样,有 4 个活动,用户开始在活动 A 上下载 ABC.mp4,然后转到活动 B。然后转到 C 并开始下载视频/图像。如果用户返回到 A,我想显示该 ABC.mp4 文件的进度(即下载量)以及其他活动的相同情况。
请让我知道您的服务或任何其他方式,以便我可以使用下载文件的更新值来更新 UI。任何帮助表示赞赏。
这是我的建议:
不久前我也做了同样的事情,不过是用 Pdf 文件。首先,您需要选择一个好的 Http 客户端库来执行下载,并且忘记如果您自己执行此操作将遇到的所有与下载相关的问题。我建议您使用离子库 https://github.com/koush/ion有很多有用的功能,例如取消下载、附加回调以关注下载进度、了解下载是否成功、失败等。
其次,你显然需要一个在后台运行的服务,总是,你可以通过创建自己的服务来做到这一点,并且 Android 清单中的服务进程名称类似于android:name="com.company.app.services.MyService"
不喜欢android:name=":MyRemoteService"
这样做,您将确保该服务始终在后台运行(请记住,如果有必要,操作系统可以并且将会终止该服务,但当资源再次可用时,该服务将重新启动)。
第三,要保持显示这些文件的所有视图、自定义视图、活动、片段等更新,您需要触发器BroadcastReceiver
来自您的服务。请记住,这样做您将无法使用LocalBroadcastReceiver
,因为您的服务有自己独立于您的应用程序的流程。
请记住:
1)无需显式使用 Activity,您可以在任何您认为合适的地方注册您的广播。一个 RecyclerAdapter(最有可能)、一个 Fragment 或一个 Activity。
2)通信应用程序/服务是通过Intents
因此,您发送到服务和从服务发送的所有数据都必须是Serializable
.
3) 您可以使用多种不同类型的广播,每种类型用于不同的情况(错误、失败、成功、进度等),或者您可以仅使用一种广播来发送enum
当您从服务中触发广播时,通过意图捆绑来描述这种状态
希望这对您有帮助,如果您有任何疑问,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)