【发布时间】:2010-09-19 09:30:38
【问题描述】:
我正在尝试为来自设备和网络的图像创建一个惰性图像加载器,用于ListView。
我正在考虑使用什么以及如何使用,一方面我可以使用一个线程来汇集我的请求(始终运行,我可以附加一个视图和一个适配器,它将为我处理图像加载),缓存我已经加载图像并在加载之前检查图像的可见性,这样我就不会做不必要的工作了。
我又想到了使用AsyncTask,就像论坛中许多人建议的那样。不过有一个缺点。我看到很多人使用new MyTask().execute(urls); 如果我想开始加载和停止按需加载图像,这会出现问题。
如果我对每个图像使用异步任务,那么我需要为每个图像创建新的异步任务,这是很多“新”任务,我可以使用一个池,但如果有太多异步任务被卡住,我仍然会创建大约 150- 200 个 asyc 任务,对我来说太多了……
你们怎么看?我认为线程会在这里做得更好:
- 继续跑直到被杀
- 尝试从队列中获取作业,如果没有作业,请稍候。
- 如果有作业,请获取并开始处理。
- 每个请求都单独处理,串行并阻塞线程。
- Once do 继续使用 '2'。
- 适配器对需要显示的视图使用
startLoadingImage()完成的每个入队都会创建一个新作业并在等待锁上调用 notify。
如果我想要多个并行的 GET\POST 请求,我可以使用线程池优化此代码。 此外,我正在缓存我已经下载\加载的图像,以便在下次访问时快速加载。这个想法是最小化 GC 和列表滞后。
【问题讨论】:
标签: android listview android-asynctask lazy-loading