Я пытаюсь создать простую демонстрацию для функции ImageLoader для Android Volley Framework . Конструктор следующий:
public ImageLoader(RequestQueue queue, ImageCache imageCache)
Проблема заключается в ImageCache
. В его JavaDoc говорится:
Простой интерфейс адаптера кэша. Если он предоставлен ImageLoader, он будет использоваться в качестве кеша L1 перед отправкой на Volley. Реализации не должны блокироваться. Рекомендуется использовать LruCache.
Если такого не существует – каковы могут быть негативные последствия использования моей существующей реализации (это просто чтение из файла):
Public byte [] get (String filename) {
byte[] ret = null; if (filesCache.containsKey(filename)) { FileInfo fi = filesCache.get(filename); BufferedInputStream input; String path = cacheDir + "/" + fi.getStorageFilename(); try { File file = new File(path); if (file.exists()) { input = new BufferedInputStream(new FileInputStream(file)); ret = IOUtils.toByteArray(input); input.close(); } else { KhandroidLog.e("Cannot find file " + path); } } catch (FileNotFoundException e) { filesCache.remove(filename); KhandroidLog.e("Cannot find file: " + path); } catch (IOException e) { KhandroidLog.e(e.getMessage()); } } return ret;
}
Что означает «Реализации не должны блокироваться» в этом контексте?
В вашем случае вы не можете делать дисковые операции ввода-вывода.
Это кеш первого уровня (L1), то есть он предназначен для возврата в микросекундах, а не в миллисекундах или секундах. Вот почему они LruCache
, который является кешем памяти.
Есть ли пример неблокирующего кеша файлов (даже не-android, но «чистый» java), который я могу использовать, чтобы обучить себя тому, как преобразовать мой существующий кеш файлов в неблокирующийся?
Кэш L1 не должен быть файловым кешем.
Каковы могут быть негативные последствия использования моей существующей реализации, которая есть (просто чтение из файла)
Кэш L1 не должен быть файловым кешем.
Волейбол уже имеет интегрированный кеш-файл L2 с именем DiskBasedCache
, используемый для кэширования ответов HTTP. Вы можете подставить свою собственную реализацию Cache
для DiskBasedCache
если хотите, и предоставить это при создании RequestQueue
.