从后台服务更新进度的最佳实践 [Android]

Posted

技术标签:

【中文标题】从后台服务更新进度的最佳实践 [Android]【英文标题】:Best practices for updating a progress from background service [Android] 【发布时间】:2015-05-19 13:02:29 【问题描述】:

对不起,如果我再次提问,但我没有找到任何与此问题相关的信息。

我正在后台服务中下载/上传文件。我想通过此服务发送文件下载/上传的进度。我知道的一种方法是每隔 5% 或 10% 的文件下载/上传发送广播。另一种是将activity与service绑定,实现一个接口,service会通知绑定的activity,下载/上传了哪个文件。不知道哪种方法好。如果您有其他好的方法,请与我分享。最多可以同时进行 5 个文件下载/上传。

提前致谢。

注意: 我没有停留在我开始下载的活动中,用户可以回家,可以开始使用其他应用程序,但是无论何时他回来,都会通知他文件下载/上传的更新进度

【问题讨论】:

【参考方案1】:

最好的解决方案是使用IntentService IntentService 类为在单个后台线程上运行操作提供了一个简单的结构。这允许它处理长时间运行的操作,而不会影响用户界面的响应能力。此外,IntentService 不受大多数​​用户界面生命周期事件的影响,因此它会在会关闭 AsyncTask 的情况下继续运行

但是 IntentService 有一些限制:

它不能直接与您的用户界面交互。要将其结果放入 UI,您必须将它们发送到 Activity。 工作请求按顺序运行。如果一个操作正在 IntentService 中运行,并且您向它发送另一个请求,则该请求会一直等待,直到第一个操作完成。 在 IntentService 上运行的操作不能被中断。

但是,在大多数情况下,IntentService 是执行简单后台操作的首选方式。

注意:如果您的应用面向 android 5.0(API 级别 21),您应该使用 JobScheduler 来执行后台服务。

【讨论】:

以上是关于从后台服务更新进度的最佳实践 [Android]的主要内容,如果未能解决你的问题,请参考以下文章

与来自服务的活动(LocalService)通信 - Android 最佳实践

实现从服务器到android来回同步数据的最佳实践(架构级别)[重复]

与服务中的活动(LocalService)进行通信 - Android最佳实践

Android上持久移动连接的最佳实践?

在后台将用户位置更新发送到服务器的最佳方式(Android)

如何获得进度对话框,直到从android中的服务获得响应?