我已经知道使用服务/意图服务我们在后台下载了多个文件 。但是这个问题有一个复杂的问题需要解决。
我必须在不同的活动中同时下载多个视频/图片,例如什么应用 。我在应用程序中看到我们可以开始下载然后我们可以在不同的屏幕上移动或按下主页按钮等。但是当我们再次返回该屏幕时,下载仍然继续并显示更新的进度。
如上所述有4个活动,用户在活动和A上开始下载ABC.mp4然后转到活动B.然后转到C并开始下载视频/图像。如果用户返回到A并且我想显示该ABC.mp4文件的进度,那么下载了多少以及其他活动的情况相同。
请告诉我服务或任何其他方式,以便我也可以使用下载文件的更新值更新UI。任何帮助表示赞赏。
答案 0 :(得分:2)
这是我的建议:
我做了同样的事情但是使用Pdf文件前一段时间。首先,您需要选择一个好的Http客户端库来执行下载,并忘记与您自己执行此操作时所具有的下载相关的所有问题。我建议您使用Ion librabry有很多有用的功能,例如取消下载,附加回调以了解下载进度,知道下载是否成功,失败等等。
其次,你显然需要一个在后台运行的服务,总是,你可以通过自己的服务来做到这一点,而且知识产权清单中的服务进程名称就像android:name="com.company.app.services.MyService"
而不是{{}}非常重要。 {1}}这样做你将确保服务将一直在后台运行(请记住,如果需要,操作系统可以并且将终止服务,但是当资源将被重新启动时服务将重新启动再次提供。)
第三,要保留显示这些文件的所有视图,自定义视图,活动,片段等,您需要从服务中触发android:name=":MyRemoteService"
。请注意,这样做无法使用BroadcastReceiver
,因为您的服务有自己独立于您的应用程序的流程。
请记住:
1)Theres无需明确使用Activity,您可以在任何您认为合适的地方注册您的广播。 RecyclerAdapter(最有可能),片段或活动。
2)通信应用/服务通过LocalBroadcastReceiver
完成,因此您发送到服务和从服务发送的所有数据必须为Intents
。
3)您可以针对不同情况(错误,失败,成功,进度等)使用多种不同类型的广播,或者您只能使用一个发送Serializable
来描述此类状态当你从你的服务中发射广播时通过意图捆绑
希望这有助于您,如果您有任何疑问,请告诉我。