【问题标题】:AsyncTask for downloading images in background用于在后台下载图像的 AsyncTask
【发布时间】:2014-03-05 08:34:27
【问题描述】:

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

实施: 从 onCreate 方法开始一个AsyncTask,它将继续在后台下载图像。 AsyncTask 最适合这个用例吗?我不想使用 Service,因为我不希望下载持续发生

AsyncTask 最适合这个目的吗?

【问题讨论】:

标签: java android android-asynctask


【解决方案1】:

我建议使用现有的库,例如 Picasso(Square 提供)或 Volley(Google 提供)。

毕加索特别容易实现,并且非常适合您的目的,并且很简单:

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

您不必担心 AsyncTasks 或 AsyncTaskLoaders,因为该库将所有这些都从您手中解放出来,将图像缓存在内存和磁盘上。

如果您坚持构建自己的解决方案,我建议您四处寻找相关问题,因为有很多事情需要牢记:

  • AsyncTasks 可能不合适,因为它们直接与单个活动耦合;您需要一个 Loader 或类似于 Loaders 的机制来将结果传递给任何需要图像的 Activity。
  • 在旧设备上,位图驻留在不受 GC 管理的特殊内存区域中;处理完位图后,您必须手动处理它们。
  • 位图使用大量内存,需要小心管理以避免 OOME,例如在 LruCache 内的内存中加载和存储时对其进行下采样。
  • 将图像写入磁盘时,请注意管理图像缓存目录的大小。

【讨论】:

    【解决方案2】:

    是的,您可以为此目的使用 Asynctask。并且使用 Asynctask “onProgressUpdate() 的 api 之一,您可以在下载图像时并行更新 UI。

    【讨论】:

    • 一旦处理返回到 UI 线程,您还需要检查 UI 的无效性。当 ASyncTask 执行繁重的工作时,该活动可能已发送到后台。
    【解决方案3】:

    您可以使用universalImageLoader 库以有效的方式下载图像。

    看到这个how to use universal Image loader for downloading images

    满足您要求的另一种解决方案是Volley Library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多