Залп кеширует только изображения в памяти, но я хочу кеш как на диске, так и в памяти
Я использую залп, как это. Проблема в том, что Volley в моем случае кэширует только изображения в памяти, но не на диске. Если я заставлю свое приложение, все кеши будут удалены из памяти. Как я могу иметь кеши памяти и диска?
public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache(getApplicationContext()));
}
return this.mImageLoader;
}
holder.picture.setImageUrl(url, MyApplication.getInstance().getImageLoader());
Примечание: я использовал DiskLruCache
написано Джейком Уортоном и все работает нормально, но в этом случае кэши существуют только на диске. Я хочу, чтобы Волли получил растровое изображение из памяти, если он существует, в противном случае с диска, если он существует, если кеша для URL-адреса нет, выполните сетевой вызов.
1 ответ
Сначала залп пытается найти кеш в LruBitmapCache, вы можете найти соответствующие коды в ImageLoader.java
Bitmap cachedBitmap = mCache.getBitmap(cacheKey);
if (cachedBitmap != null) {
// Return the cached bitmap.
ImageContainer container = new ImageContainer(cachedBitmap, requestUrl, null, null);
imageListener.onResponse(container, true);
return container;
}
Затем Volley идет так же, как и другие http-запросы (которые не используют ImageLoader). Короче говоря, DiskLruCache используется по умолчанию. Volley использует CacheDispatcher для работы с кешем на диске. Стратегия кэширования основана на Cache-Control и / или других заголовках с сервера.
Насколько я знаю, volley по умолчанию кэширует все запросы, несмотря на отсутствие Cache-Control или связанных заголовков. Однако кэши не будут использоваться, если такой заголовок не существует.
Если вы не хотите менять логику залпа, вы можете рассмотреть возможность поддержки кэша со стороны сервера.