2014-03-05 44 views
0

我的应用程序向用户一个接一个地显示图像。图像从服务器下载。由于我不希望用户等待下载的图像,我将它们缓存在本地文件系统中(例如新的50张图像)。AsyncTask用于在后台下载图像

执行: 从onCreate方法启动一个AsyncTask,将继续在后台下载图像。 是AsyncTask最适合这种使用情况?我不想用一个Service因为我不想下载到连续发生

AsyncTask最适合这个目的是什么?

+1

你也可以使用Volley。 –

+0

毕加索(图片加载库)将有我的投票 - https://github.com/square/picasso –

回答

1

是的,你可以使用Asynctask来达到这个目的。而使用的AsyncTask“onProgressUpdate()的API中的一个,可以并行更新的用户界面为你的形象越来越下载。

+0

您还需要在处理返回到UI线程时检查UI的无效性。该活动可能已发送到背景,而ASyncTask正在做繁重的工作。 –

2

我会建议使用现有的库,例如Picasso(以方)或Volley(由谷歌)。

毕加索是特别容易实现,而且会很好地工作,你的目的,并且是一样简单:为库通吃的这一点

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

你不会有AsyncTasks或AsyncTaskLoaders担心自己将你的双手图像缓存在内存和磁盘上。

如果你坚持建立自己的解决方案,我建议对相关问题东张西望,因为有很多事情要牢记:

  • AsyncTasks可能生病安装,因为它们直接与单个活动;你需要一个Loader或一个类似于Loaders的机制来将结果传递给任何需要图像的活动。
  • 在较旧的设备上,位图驻留在未由GC管理的特殊内存区域中;当你完成它们后,你将不得不手动处理位图。
  • 位图使用大量内存,需要仔细管理以避免OOME,例如在加载和存储在LruCache内存中时对其进行缩减采样。
  • 将图像写入磁盘时,请小心管理图像缓存目录的大小。