2

我需要帮助设计针对特定于长时间运行的后台任务的问题的解决方案。

背景:

  • 我有一个带有显示文件列表的活动的应用程序。
  • 每个文件都可以下载。每个下载的文件都可以有更新。
  • 更新(如果有)将作为带有立即更新按钮的通知触发。该应用程序有一个显示每个文件更新的活动。
  • 在任一位置单击立即更新会触发后台作业下载文件并在两个位置更新 UI 中的进度(取决于用户所在的位置)。
  • 用户可以同时更新/下载最多 4 个文件。

设计:

  • 我有一个带有 WakefulBroadcastReceiver 的 GCM 设置,它启动一个 IntentService 来通知任何更新。
  • 更新/下载是一个 Runnable - DownloadRunnable.java
  • 一个单例类,MyDownloadManager 有一个静态方法 startDownload(),它使用特定的 url 启动 DownloadRunnable。

问题:

  • 下载更新时如何更新通知和活动的进度?
  • 如何扩展设计以运行并发下载并更新相应项目的进度?
4

2 回答 2

3
  1. 我会将下载任务移动到服务中。
  2. 我不会自己实现它,而是使用 DownloadManager System 服务,请参阅文档使用示例
  3. 在您的 UI 中,您可以在后台线程中查询下载状态,请参阅这个 SO 问题:使用 DownloadManager 在活动中显示下载进度。与解决方案不同,我将使用AsyncTask代替。

这使您可以并行执行下载。在活动中,您可以通过在后台线程中轮询来显示当前进度,但我不确定您对通知的含义是什么?DownloadManager 在开始下载时显示通知。

您的下载将比使用自己的实现更稳定,因为 DownloadManager 可以处理连接丢失并执行重试。

于 2014-04-08T07:38:16.800 回答
0

我建议使用安卓的DownloadManager. 这是整个操作系统使用的下载管理器。下载完成后,您将使用ACTION_DOWNLOAD_COMPLETE.

试试这个教程:

http://blog.vogella.com/2011/06/14/android-downloadmanager-example/

于 2014-04-08T08:00:52.247 回答