Android Universal Image Loader: обходная проверка диска / кэша памяти при загрузке изображения?
В библиотеке доступна только опция включения / выключения кэширования в настройках отображения. Есть ли способ избежать проверки диска или кэша памяти при загрузке изображений?
Моя проблема в том, что библиотека всегда сначала проверяет кэш диска. Мой дисковый кеш установлен с небольшим размером миниатюр. Когда мне нужно загрузить изображения по размеру экрана, я не могу пропустить кэш диска, он всегда дает мне изображение с меньшим разрешением.
1 ответ
UIL всегда проверяет кэши перед отображением. Так что не обойтись без изменения источников.
Но я думаю, что вы можете решить свою проблему путем расширения дискового кэша. Цель - вернуть несуществующий файл из get()
метод, когда вы хотите загрузить полноразмерное изображение. Таким образом, вы должны сделать как обычно, чтобы загрузить эскизы. Когда вам нужно отобразить полноразмерное изображение, вы должны отключить кэширование на диске в настройках отображения (DisplayImageOptions
), а затем сделать что-то вроде этого:
((MyDiscCache) imageLoader.getDiscCache()).setIgnoreDiskCache(true);
Таким образом, ваш кеш должен возвращать любой несуществующий файл (но не ноль).
Когда вы вернетесь к отображению миниатюр, вы должны "включить" (setIgnoreDiskCache(false)
) кеш диска обратно.
UPD: создайте свой собственный дисковый кеш и установите его в config.
public class MyDiscCache extends UnlimitedDiscCache {
private boolean ignoreDiskCache;
public MyDiscCache(File cacheDir) {
super(cacheDir);
}
public MyDiscCache(File cacheDir, FileNameGenerator fileNameGenerator) {
super(cacheDir, fileNameGenerator);
}
@Override
public File get(String key) {
if (ignoreDiskCache) {
return new File("fakePath");
} else {
return super.get(key);
}
}
public void setIgnoreDiskCache(boolean ignoreDiskCache) {
this.ignoreDiskCache = ignoreDiskCache;
}
}