【问题标题】:Best practices for updating a progress from background service [Android]从后台服务更新进度的最佳实践 [Android]
【发布时间】:2015-05-19 13:02:29
【问题描述】:
对不起,如果我再次提问,但我没有找到任何与此问题相关的信息。
我正在后台服务中下载/上传文件。我想通过此服务发送文件下载/上传的进度。我知道的一种方法是每隔 5% 或 10% 的文件下载/上传发送广播。另一种是将activity与service绑定,实现一个接口,service会通知绑定的activity,下载/上传了哪个文件。不知道哪种方法好。如果您有其他好的方法,请与我分享。最多可以同时进行 5 个文件下载/上传。
提前致谢。
注意:
我没有停留在我开始下载的活动中,用户可以回家,可以开始使用其他应用程序,但是无论何时他回来,都会通知他文件下载/上传的更新进度
【问题讨论】:
标签:
android
android-intent
android-service
progress
【解决方案1】:
最好的解决方案是使用IntentService
IntentService 类为在单个后台线程上运行操作提供了一个简单的结构。这允许它处理长时间运行的操作,而不会影响用户界面的响应能力。此外,IntentService 不受大多数用户界面生命周期事件的影响,因此它会在会关闭 AsyncTask 的情况下继续运行
但是 IntentService 有一些限制:
- 它不能直接与您的用户界面交互。要将其结果放入 UI,您必须将它们发送到 Activity。
- 工作请求按顺序运行。如果一个操作正在 IntentService 中运行,并且您向它发送另一个请求,则该请求会一直等待,直到第一个操作完成。
- 在 IntentService 上运行的操作不能被中断。
但是,在大多数情况下,IntentService 是执行简单后台操作的首选方式。
注意:如果您的应用面向 Android 5.0(API 级别 21),您应该使用 JobScheduler 来执行后台服务。