从Facebook下载用户个人资料照片:AsyncTask或HandlerThread

时间:2017-06-18 10:01:40

标签: java android multithreading android-asynctask android-handlerthread

我有一个网址列表。每个网址都有一个不同的Facebook用户的个人资料图片。

我想下载这些图片并将其显示在UI线程上(在屏幕上)。

我为每个图像使用了新的AsyncTask,图像逐个显示。

doInBackground (后台线程)返回位图:

InputStream in = new java.net.URL(imgUrl).openStream();
Bitmap bm = BitmapFactory.decodeStream(in);

onPostExecute (UI线程)将为我的成员设置图像位图

  1. 是下载图片的正确方法还是我需要使用处理程序?
  2. 当用户想要在UI上进行更改时选择AsyncTask,而Handler用于通过消息在任意2个线程之间进行通信。有什么特别的区别吗?因为我似乎可以同时使用这两种态度。

1 个答案:

答案 0 :(得分:2)

异步任务通常是在单独的线程上工作而不是UI线程的最简单方法,但它并不总是最好的。

我的经验法则是:

如果您正在做与UI相关的隔离事务,例如下载数据以显示在列表中,请继续使用AsyncTask。

如果您正在执行多个重复任务,例如下载要在下载时在ImageViews中显示的多个图像(如下载缩略图),请使用带Handler的任务队列。

修改

正如@Thecave3指出的那样,最好让图像加载库为你加载。 PicassoGlide是合适的选择。他们甚至提供下载和错误占位符作为可选功能。