Android отображает изображения в автономном режиме после загрузки с использованием фрески
Я хочу, чтобы fresco загружал и сохранял изображения на SD-карту при подключении к Интернету. Позже, когда в автономном режиме и даже если кэш очищен, мне все еще нужно фреска, чтобы показать сохраненные изображения. Это возможно? Если да, то как?
Кажется, что простое сохранение изображений в кэш диска не работает, когда кэш очищен.
2 ответа
Фреска кеширует изображения для вас. Если вы не в сети, изображения все равно должны отображаться. Вам не нужно ничего делать.
Однако, когда кэш очищается (например, когда пользователь нажимает кнопку или когда на устройстве мало места), изображения, очевидно, удаляются из кеша, что является желательным поведением, которое не следует изменять.
Есть 2 варианта: сохранить выбранные элементы, переместить кеш
Сохранить выбранные элементы
Если вы хотите сохранить выбранные изображения (например, кнопку "Сохранить"), вы можете получить закодированное изображение и сохранить его где-нибудь на устройстве. Не следует делать это для всех изображений, так как они будут на диске 2 раза, а очистка кеша / удаление приложения оставит 1 копию на устройстве.
Нечто подобное может сработать:
DataSource<CloseableReference<PooledByteBuffer>>
dataSource = Fresco.getImagePipeline().fetchEncodedImage(imageRequest, callerContext);
dataSource.subscribe(new BaseDataSubscriber<CloseableReference<PooledByteBuffer>>() {
@Override
protected void onNewResultImpl(DataSource<CloseableReference<PooledByteBuffer>> dataSource) {
CloseableReference<PooledByteBuffer> encodedImage = dataSource.getResult();
if (encodedImage != null) {
try {
// save the encoded image in the PooledByteBuffer
} finally {
CloseableReference.closeSafely(encodedImage);
}
}
}
@Override
protected void onFailureImpl(DataSource<CloseableReference<PooledByteBuffer>> dataSource) {
// something went wrong
}
}, executorService);
}
Дополнительная информация о том, как использовать конвейер для получения закодированного изображения: http://frescolib.org/docs/using-image-pipeline.html
Переместить кеш
Имейте в виду, что это сохранит кеш при перемещении во внешний каталог, поэтому будьте осторожны, так как это приведет к тому, что файлы будут удалены при удалении приложения.
Фреска также позволяет поставлять на заказ DiskCacheConfig
и вы можете создать новый DiskCacheConfig.Builder
и позвонить setBaseDirectoryPath(File)
изменить путь к другой папке (например, на SD-карте), и вы также можете изменить имя каталога с помощью setBaseDirectoryName(String)
Более подробная информация о том, как Fresco выполняет кэширование: http://frescolib.org/docs/caching.html
Вам нужно вручную сохранить изображения на диск при загрузке. При отображении изображений проверьте, находится ли изображение на диске: если его нет, загрузите его с URL-адреса (и сохраните на диск).