Рассмотрим следующую строку кода Glide.with(getContext()).downloadOnly().load(some_uri).submit();

Вопрос 1) Это синхронно или асинхронно?

Вопрос 2) Если он синхронный, то как сделать его асинхронным? Если он асинхронный, то как мне сделать его синхронным?

Вопрос относится к Glide v4

3
AlanSTACK 31 Дек 2017 в 21:07

2 ответа

Лучший ответ

Отвечая на свой вопрос.

Glide.with(getContext()).downloadOnly().load(some_uri).submit();

Асинхронный.

Glide.with(getContext()).downloadOnly().load(some_uri).submit().get();

Синхронизируется

10
Zoe 24 Мар 2019 в 16:00

API-интерфейс Glide downloadOnly () позволяет загружать байты изображения в кеш диска, чтобы его можно было извлечь позже. Вы можете использовать downloadOnly () асинхронно downloadOnly (Y target) в потоке пользовательского интерфейса или синхронно donwloadOnly (int, int) в фоновом потоке. Обратите внимание, что аргументы немного отличаются: асинхронный API принимает целевое значение, а синхронный API принимает целые значения ширины и высоты.

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

FutureTarget<File> future = Glide.with(applicationContext)
    .load(yourUrl)
    .downloadOnly(500, 500);
File cacheFile = future.get();

Как только будущее возвращается, байты изображения доступны в кеше. Обычно API-интерфейс downloadOnly () используется только для того, чтобы убедиться, что байты доступны на диске. Хотя вам предоставляется доступ к базовому файлу кеша, обычно вы не хотите с ним взаимодействовать.

Вместо этого, когда вы позже захотите получить свое изображение, вы можете сделать это с помощью обычного вызова с одним исключением:

Glide.with(yourFragment)
    .load(yourUrl)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(yourView);
0
Misha Akopov 31 Дек 2017 в 18:18