Как использовать Android CacheManager? - PullRequest
11 голосов
/ 13 января 2010

В настоящее время я разрабатываю приложение для Android, которое извлекает изображения с использованием http-запросов. Было бы неплохо, если бы я мог кэшировать эти изображения, чтобы улучшить производительность и использование полосы пропускания.

Я столкнулся с классом CacheManager в справочнике по Android, но на самом деле я не знаю, как его использовать или что он действительно делает.

Я уже рассмотрел этот пример, но мне нужна помощь в его понимании:

/ ядро ​​/ Java / Android / WebKit / шестерни / ApacheHttpRequestAndroid.java

Кроме того, ссылка указывает:

«Сетевые запросы предоставляются этому компоненту, и, если они не могут быть разрешены кешем, заголовки HTTP соответствующим образом присоединяются к запросу на повторную проверку контента.»

Я не уверен, что это значит или как это будет работать для меня, так как getCacheFile в CacheManager принимает только строковый URL и карту, содержащую заголовки. Не уверен, что означает упомянутое вложение.

Объяснение или простой пример кода действительно помогли бы мне. Спасибо!

Обновление

Вот что у меня есть сейчас. Я явно делаю это неправильно, просто не знаю, где.

public static Bitmap getRemoteImage(String imageUrl) {
        URL aURL = null;
        URLConnection conn = null;
        Bitmap bmp = null;

        CacheResult cache_result = CacheManager.getCacheFile(imageUrl, new HashMap());

        if (cache_result == null) {
            try {
                aURL = new URL(imageUrl);
                conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();

                cache_result = new CacheManager.CacheResult();
                copyStream(is, cache_result.getOutputStream());
                CacheManager.saveCacheFile(imageUrl, cache_result);
            } catch (Exception e) {
                return null;
            }
        }

        bmp = BitmapFactory.decodeStream(cache_result.getInputStream());
        return bmp;
    }

Ответы [ 2 ]

10 голосов
/ 10 апреля 2010

Я не думаю, что CacheManger можно использовать вне WebView, как отмечено в этом отчете об ошибках http://code.google.com/p/android/issues/detail?id=7222

1 голос
/ 25 декабря 2010

Я тоже сталкивался с этой проблемой некоторое время назад. Диспетчер кэша предназначен только для веб-просмотра и не очень полезен. Для моего приложения мне нужно было кэшировать xml ответы и изображения, поэтому я решил написать свой собственный менеджер кеша. Ничего страшного, но, конечно, не так просто, как использование встроенного.

Если у вас есть какие-либо вопросы по поводу специфики, добавьте комментарий к моему посту, я часто проверяю.

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