0

我有一个网址列表。每个 url 都有一个不同的 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 个线程之间进行通信。有什么特别的区别吗?因为我似乎可以同时使用这两种态度。
4

1 回答 1

2

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

我的经验法则是:

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

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

编辑:

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

于 2017-06-18T10:25:02.730 回答