【问题标题】:Getting progress of an IntentService获取 IntentService 的进度
【发布时间】:2012-08-13 07:31:28
【问题描述】:

我正在开发一个需要大量 API 调用的 Android 应用。我已经构建了一个基于 IntentService 实现排队系统的系统。问题是,我想在 IntentService 运行时显示准确的 ProgressBar 更新。

一种方法是将排队系统更改为一系列 AsyncTask。我必须使用onProgressUpdate() 来显示进度。

另一种方法是调整 IntentService 并从后台线程获取进度。

问题是,我想结合 IntentService 和 AsyncTask 的好功能:创建一个可以轻松处理 UI 事件的排队系统。有没有最好的方法来实现它?

编辑: 我最终使用了 AsyncTasks 而不是 IntentServices。但是,如果有人有一个很好的模式可以分享来更新 IntentService 的进度,请随时添加您的评论。

【问题讨论】:

  • 嘿,我也在尝试做同样的事情,但做不到。我在 doInbackground 中有我的网络调用,在 onPre 和 onPostExecute() 中有进度条码。现在我正在尝试映射到意图服务。如何处理其中的进度条码。任何帮助都会很棒..

标签: android queue android-asynctask intentservice


【解决方案1】:

我愿意

  • 启动一个HandlerThread和一个Handler
  • 获取主 UI 线程的处理程序
  • 使用后台线程的处理程序将工作发布到后台线程
  • 使用 UI 线程的处理程序将进度更新和结果发布到 UI

这样您就可以有一个后台线程来处理您的工作队列,并将您喜欢的任何内容发布回 UI 线程,而无需处理广播

【讨论】:

    【解决方案2】:

    对于我来说,对于 IntentService,我正在考虑广播何时启动进度条,以及何时结束进度条。通常,您可以对结尾部分使用标准的“receive back”。您可以使用不同的字符串注册不同的意图广播。

    棘手的部分是想办法让调用找出进度条是否被取消,我正在考虑创建一个状态表,该表可以随着 REST 调用的进行而更新。该表将具有调用的 id,完成后,该条目将被删除。该表将跟踪线程是否应该处于活动状态。

    因此,REST 线程将在每次发送之前检查表,并停止一切/如果检测到取消则忽略发回数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多