Можно ли заставить Android Glide ждать / перезагружать изображение, которое сохраняется в другом потоке? - PullRequest
0 голосов
/ 19 января 2019

Я использую Glide в связывающем адаптере для RecyclerView в Android.

RecyclerView загружается, когда пользователь перемещается из фрагмента детали, обратно во фрагмент галереи, который показывает миниатюры того, что только что произошло во фрагменте детали.

Иногда при загрузке RecyclerView одно из изображений в RecyclerView все еще записывается в другом потоке (Kotlin coroutine, если это имеет значение), который был запущен фрагментом детали.

Glide находит изображение и отображает его, даже если оно неполное, что приводит к частичным или (чаще) пустым эскизам в галерее RecyclerView.

Есть ли способ заставить адаптер привязки ждать, пока изображение завершит запись в другом потоке, прежде чем загружать его, или повторно загрузить его, когда оно закончится?
Если это имеет значение, изображения PNGs.

Вот мой код из adapter класса:

@BindingAdapter("memoThumb")
fun memoThumb(view: ImageView, memo: Memo) {
  val imageUrl = "${getPath(memo.uuid)}$THUMB_NAME"
  if (imageUrl.isNotEmpty()) {
    Glide.with(view.context)
            .load(imageUrl)
            .apply(RequestOptions()
                    .signature(ObjectKey(System.currentTimeMillis()))
                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
            )
            .transition(DrawableTransitionOptions.withCrossFade())
            .into(view)
  }
}

Спасибо!
John

1 Ответ

0 голосов
/ 21 января 2019

Фоновые потоки Загрузка изображений в фоновые потоки также выполняется с помощью команды submit (int, int):

FutureTarget<Bitmap> futureTarget =
  Glide.with(context)
    .asBitmap()
    .load(url)
    .submit(width, height);

 Bitmap bitmap = futureTarget.get();

// Сделайте что-нибудь с битовой картой, а затем, когдас этим покончено:

Glide.with(context).clear(futureTarget); 

Вы также можете запускать асинхронную загрузку в фоновых потоках так же, как в приоритетном потоке, если вам не нужны растровые изображения или Drawableв самой фоновой ветке:

Glide.with(context)
  .asBitmap()
  .load(url)
  .into(new Target<Bitmap>() {
    ...
  });   

из glide (v4) docs

, пожалуйста, дайте мне знать, какая часть вас смущает, а также васповторно используете glide v3 или v4

...