用于网络请求的AsyncTask v / s ThreadPoolExecutor

时间:2011-10-10 18:59:25

标签: android web-services android-asynctask

我正在开发一个项目,我需要点击Web服务下载JSON数据并将在列表中显示。并且所有列表项都有缩略图URL,它们将被下载并显示在列表项中。

我用ThreadPoolExecutor和AsyncTask完成了整个调用部分。

但从设计角度来看,这是一个更好的选择:
1. ThreadPoolExecutor
2. AsyncTask

很少有人说。 ThreadPoolExecutor:
1.用户可以定义否。可以执行的并发线程 2.立即取消所有请求。

很少有人说。 of AsyncTask:
1.在内部它使用ThreadPoolExecutor,但我们不能定义否。同时运行的线程 2.取消单个请求很容易 3.附加和分离任务的能力 4.从doInBackground更新UI很简单。

我知道AsyncTask的更多优点,但是对于一个简单的应用程序,例如从Web服务获取数据以及稍后获取图像。

AsyncTask或ThreadPoolExecutor哪个更合适?如果您能提供一些有关您选择的理由,那将会很有帮助。

我在这里读过一些关于SO的文章,但没有一篇比较这两篇文章。如果有任何我错过了抱歉的问题,请你给我发链接。

提前致谢。

1 个答案:

答案 0 :(得分:6)

如果您想使用“cascade-call”系列加载缩略图,我认为AsyncTask非常有用:在onPostExecute中,您可以启动下一个AsyncTask来下载下一个缩略图。

但是如果你想提高效率,我建议使用ThreadPoolExecutor。这是来自developer.android.com的句子:

  

线程池解决了两个不同的问题:它们通常提供   执行大量异步时提高性能   任务,由于减少了每个任务的调用开销,并且它们提供了一个   绑定和管理资源的方法,包括线程,   在执行任务集合时消耗。每个ThreadPoolExecutor   还保留了一些基本的统计数据,比如已完成的数量   任务。

总之,ThreadPoolExecutor可能是为你的情况设计的;因此,我建议你上课。