Порядок поиска изображений в Picasso: Кэш памяти -> Кэш диска -> Сеть.
Итак, есть несколько сценариев, по которым нам нужно сделать недействительным кеш в Picasso:
1. Недействительный кеш памяти:
- Usercase: когда изображение уже обновлено в кеше диска или на удаленном хосте
Решение: очистить кеш от URL, файла и Uri, если они существуют
mPicasso.with(appContext).invalidate(File);
mPicasso.with(appContext).invalidate(Url);
mPicasso.with(appContext).invalidate(Uri);
.
2. Недействительный кеш памяти и дисковый кеш в сети
※ примечание: Онлайн означает обновление непосредственно в ImageView.
Пример пользователя: изображение обновлено на удаленном хосте
Решение: отменить изображение в кеш-памяти и кеш-памяти диска, а затем запросить изображение на удаленном хосте.
mPicasso.with(appContext)
.load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE )
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
-> Прервать кэш памяти и дисковый кеш
.
3. Недействительный кеш памяти и дисковый кеш Offline
※ примечание: Offline означает, что обновление не обновляется до ImageView, а выполняется только фоновая загрузка для использования позже.
※ Примечание: использование fetch () - это хорошо, но оно также потребляет сетевой ресурс, поэтому, пожалуйста, подумайте внимательно, проверьте сценарий 4 ниже для лучшего решения.
4. Сделайте недействительным кеш памяти и дисковый кеш Offline, если дисковый кеш существует
- Случай пользователя: аннулируйте кеш, только если он уже существует в дисковом кеше
Решение: следует проверить диск с помощью параметра: NetworkPolicy.OFFLINE cache перед выборкой
mPicasso.with(appContext)
.load(url)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.OFFLINE)
.fetch(new Callback() {
@Override
public void onSuccess() {
//Success: mean disk cache exist -> should do actual fetch
picasso.load(url).fetch();
}
@Override
public void onError() {
//Failed: mean disk cache not exist
}
});
Picasso - потрясающая библиотека, я надеюсь, что в ближайшем будущем Squareup добавит больше удобного API для управления кешем.
person
NguyenDat
schedule
12.10.2016
Picasso.with(getActivity()).invalidate(file);
как я могу снова кэшировать? - person tux-world   schedule 31.05.2017