如何使用ThreadPoolExecutor和AsyncTask

12

我对ThreadPoolExecutor有些困惑,这是我想要完成的事情:

我有一个列表视图,左侧是图像图标,右侧是简短的描述。我已经静态定义所有的文本,但我想从网络上获取这些图标。我已经知道如何从URL获取图像,但我不想为了抓取图标图像而生成“n”个线程。因此,我了解了用于异步任务的ThreadPoolExecutor,但我不确定该如何开始。你们能给我一个头绪吗?我需要创建ThreadPoolExecutor并在其中使用AsyncTasks吗?

我的列表是这样的...没有图标。

___________________________
[icon][a short description]
____________________________
[icon][a short description]
_____________________________
[icon][a short description]
_____________________________
[icon][a short description]
____________________________
2个回答

8

我建议只使用AsyncTask,不必担心ThreadPoolExecutor,因为它需要HoneyComb。 AsyncTask有一个线程池,将为您的所有列表项重复使用。 它不会为每个图标创建一堆线程。

只需记住,在Android 2.x上,您的任务将并行运行,并跟踪代码可能存在的任何同步问题。


当我在我的异步任务中执行Log.d(TAG,“Created”)时,它显示创建了“n”个线程。所以你的意思是,即使它们被创建了,Async也有一种内部控制线程池的方式? - HAxxor
你需要为每个任务创建一个新的AsyncTask实例并执行它。不应该重复使用这些实例。AsyncTask管理线程池,所有任务共享该池。 - Steve Prentice
4
根据文档,ThreadPoolExecutor 从API level 1就可用,我认为这是最好的解决方案。 - Dheeraj Vepakomma
2
@Dheeraj,AsyncTask在API级别3之前是不可用的,而AsyncTask.exexcuteOnExecutor在API级别11(蜂窝)之前也是不可用的。 - Steve Prentice

4
你需要使用方法executeOnExecutor()来启动它并使用自己的执行器。
有一些需要注意的问题,因此请仔细阅读整个 AsyncTask 页面。
所以,是的,你可以创建自己的ThreadPoolExecutor并将其与AsyncTask一起使用。

谢谢,我会进一步研究!看起来使用起来相当麻烦..哈哈 - HAxxor
然而,这在 API 级别低于 11 的情况下不可用。 - rallat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接