我需要帮助设计一个特定于长期运行的后台任务的问题的解决方案。
背景:
我有一个活动显示文件列表的应用程序。
每个文件都可以下载。每个下载的文件都可以有一个更新。
更新(如果有)将作为“立即更新”按钮的通知触发。应用程序有一个显示每个文件更新的活动。
单击任一位置的“立即更新”将触发下载文件的后台作业,并在两个位置的UI中更新进度(取决于用户的位置)。
用户最多可以同时更新/下载4个文件。
设计:
我有一个带有wakefulbroadcastReceiver的gcm设置,它启动一个intentService来通知任何更新。
更新/下载是一个runnable-downloadrunnable.java
作为一个单例类,mydownloadmanager有一个静态方法startdownload(),它用一个特定的url启动downloadrunnable。
问题:
如何在下载更新时更新通知和活动的进度?
如何扩展设计以运行并发下载并更新相应项的进度?
最佳答案
我将把下载任务转移到一个服务中。
我不会自己实现它,而是使用downloadmanager系统服务,请参见doc和usage example。
在ui中,您可以在后台线程中查询下载状态,请参见以下问题:Show Download progress inside activity using DownloadManager。与解决方案不同,我将使用AsyncTask代替。
这允许您并行执行下载。在活动中,您可以通过在后台线程中轮询来显示当前进度,但我不确定通知的含义是什么?下载管理器在开始下载时显示通知。
您的下载将更加稳定,而不是使用自己的实现,因为downloadmanager可以处理连接丢失,并将执行重试。