gpt4 book ai didi

java - Android:为并发后台作业(服务、IntentService 或 AsyncTask?)设计

转载 作者:搜寻专家 更新时间:2023-11-01 08:51:33 24 4
gpt4 key购买 nike

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

背景:

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

设计:

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

问题:

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

最佳答案

  1. 我会将下载任务转移到服务中。
  2. 我不会自己实现它,而是使用 DownloadManager 系统服务,参见 docusage example .
  3. 在您的 UI 中,您可以在后台线程中查询下载状态,请参阅此 SO 问题:Show Download progress inside activity using DownloadManager .与我使用 AsyncTask 的解决方案不同相反。

这允许您并行执行下载。在 Activity 中,您可以通过在后台线程中轮询来显示当前进度,但我不确定通知是什么意思? DownloadManager 在开始下载时显示通知。

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

关于java - Android:为并发后台作业(服务、IntentService 或 AsyncTask?)设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22871580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com