我有这样的场景,我将不得不对我的服务器进行六次http调用,以获取六个不同项目的数据。这些服务器调用无法组合,它们就是这样。例如:如果您需要GOOGLE的报价信息,请向服务器发送请求谷歌报价信息的请求。接下来,如果您需要雅虎,那么您将启动另一个http呼叫,依此类推。
情况如下:
我的问题:
注意:我想Android 1.6+会并行执行异步任务。
这更像是一个设计问题,我将不胜感激。
提前致谢
答案 0 :(得分:4)
您可以创建一个AsyncTask池对象,允许您欺骗“批量”http调用。
一般的想法是让Pool知道有多少任务和待处理,以及存储已完成调用的聚合数据。完成所有操作后,通知观察活动并传回所有数据。
你必须弄清楚AsyncTasks如何告诉Pool他们已经完成了。也许只是简单地使用AsyncTask的实现,在其构造函数上使用Pool,以便Tasks可以引用Pool。
答案 1 :(得分:1)
可以通过多种方式处理此问题:
AsyncTask
。sendEmptyMessageDelayed()
Handler
创建Activity
创建的Handler
,刷新从网络任务进入的数据,并继续这样做直到所有处理网络结果。如果是我,我可能会选择handleMessage()
。总而言之,让您的网络任务将数据存储在某个中间存储中。将延迟消息发送到处理程序,并在{{1}}内检查中间存储中的数据并发布更新结果。如果结果未完成,请再次发布延迟消息。
答案 2 :(得分:1)
我发现这个解决方案更适合我的问题。 此链接描述了几种建立此方法的方法。 1. ExecutorService 2. ExecutoreService和CountDownLatch
答案 3 :(得分:1)
只是在黑暗中刺伤,但你有:
为什么在UI线程中没有公共范围的变量,称为“ finishedTasks ”,然后在每个6x返回数据线程中使用相同的方法:
增加finishedTasks
如果finishedTasks == 6则运行1个公共方法来更新UI
然后它将在所有背景上更新UI asychtasks完成。