Picassso-使用缓存时(即使从网络强制加载)图像显示的延迟也很大

时间:2019-04-02 18:48:09

标签: android imageview picasso

我有一个用例,我正在使用毕加索下载照片并将其存储到缓存中。全部下载可能需要一些时间。 因此,我想采取一种变通办法,如果映像不在缓存存储中,然后从网络加载它。

似乎有一些显而易见的解决方案,例如: Load already fetched image when offline in Glide for Android

但是我的用例是我必须将此照片加载到目标(因为加载图像时我应该可以访问位图,以便例如获取其宽度和高度)

这是我下载照片网址并缓存它们的设置:

 private fun syncPhotos(urls: List<String>): Completable {
    return Completable.create { emitter ->
      if (urls.isEmpty()) {
        emitter.onComplete()
      } else {
        val picasso = Picasso.get()
        val counter = AtomicInteger(urls.size)
        for (url in urls) {
          picasso.load(url).fetch(object : Callback {
            override fun onSuccess() {
              Timber.d("Photo caching success (counter=$counter)")
              if (counter.decrementAndGet() == 0) {
                emitter.onComplete()
              }
            }

            override fun onError(e: Exception?) {
              Timber.e(e, "Photo caching error (counter=$counter)")
              if (counter.decrementAndGet() == 0) {
                emitter.onComplete()
              }
            }
          })
        }
      }
    }
  }

然后我只想在“活动”中加载一些照片并将其加载到目标:

    Picasso.get()
        .load(photoId)
        .into(photoTarget)

这是我的photoTarget

  private var photoTarget: Target = object : Target {
    override fun onPrepareLoad(placeHolderDrawable: Drawable?) {

    }

    override fun onBitmapFailed(ex: Exception, errorDrawable: Drawable?) {

    }

    override fun onBitmapLoaded(bitmap: Bitmap, from: Picasso.LoadedFrom) {
     //do some staff with loaded bitmap like ex. set the ImageView using setImageBitmap()
    }
  }

问题是照片没有被第一次显示-像被等待从上一个fetch()函数从缓存中下载照片一样,显示时间延迟很大。我什至尝试使用以下方法第一次强制从网络加载它:

  Picasso.get()
        .load(photoId)
        .networkPolicy(NetworkPolicy.NO_CACHE)
        .into(photoTarget)

但是它似乎仍然从缓存加载(巨大的延迟,然后显示)

什么可以解决此问题?

注意:我已经尝试过:

.resize() 

使用fetch()方法时,直到那时看来似乎工作正常-图像不在缓存中时是从网络下载的

0 个答案:

没有答案