获得IntentService的进展

时间:2011-10-07 16:16:13

标签: android queue android-asynctask intentservice

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

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

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

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

修改 我最终使用AsyncTasks而不是IntentServices。但是,如果有人有一个很好的模式来分享来从IntentService更新进度,请随时添加你的评论。

2 个答案:

答案 0 :(得分:2)

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

通过这种方式,您可以使用一个后台线程来处理您的工作队列,并将您喜欢的任何内容发布回UI线程,而无需处理广播

答案 1 :(得分:1)

对我来说,对于IntentService,我在考虑广播何时开始进度条,以及何时结束进度条。通常,您可以使用标准的“接收”作为结束部分。您可以使用不同的字符串注册不同的意向广播。

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

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