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

download users profile pics from Facebook: AsyncTask or HandlerThread

我有一个 url 的列表。每个 url 拥有不同的 facebook 用户个人资料照片。

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

我为每张图片使用了新的AsyncTask,图片一张一张显示。

doInBackground(后台线程)returns Bitmap:

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

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

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

与 UI 线程相比,Async Task 通常是在单独线程上工作的最简单方法,但它并不总是最好的方法。

我的经验法则是:

如果您正在执行与 UI 相关的独立操作,例如下载数据以显示在列表中,请继续使用 AsyncTask。

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

编辑:

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