Кеширование файлов гуавы - PullRequest
4 голосов
/ 15 марта 2012

Я использую Guava в своем приложении для Android для загрузки изображений и кэширования их имен файлов.

Вот мой кеш:

private static final LoadingCache<String, String> imageCache = CacheBuilder.newBuilder()
    .softValues()
    .initialCapacity(3000)
    .maximumSize(3000)
    .concurrencyLevel(12)
    .expireAfterAccess(IMAGE_EXPIRATION_TIMEOUT, TimeUnit.SECONDS)
    .build(new CacheLoader<String, String>() {
        @Override
        public String load(String key) throws Exception {
            Log.d(TAG, "load " + key);
            Bitmap bitmap = null;

            final File imageFile = new File(cacheDir, "http---com-jWs-jpg");

            return imageFile.getPath();
        }
    });

И используя:

String filename = imageCache.get(imageUrl);
Log.e(TAG, ">>> i:cache size :"+ imageCache.size() +":"+ imageCache.stats() +":"+ imageCache.asMap());
return Drawable.createFromPath(filename);

Моя проблема: в моем списке 12 уникальных URL, но у меня слишком большое количество пропусков:

i:cache size :6:CacheStats{hitCount=36, missCount=48, loadSuccessCount=48, loadExceptionCount=0, totalLoadTime=46569827...)

Когда я возвращаю простую строку (например, путь к файлу или просто пустую строку), у меня есть только 12 промахов, а другие get являются попаданиями. Что я делаю не так?

1 Ответ

4 голосов
/ 15 марта 2012

Хорошо, понял.

.softValues() была причина, мои значения были собраны сборщиком мусора.Когда я это прокомментировал, все теперь работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...