Я работаю над приложением на Android, которое имеет большую нагрузку на запросы веб-сервисов.HTTPResponseCache хранит, но никогда не удаляет
У меня уже есть функция LoginActivity, в которой пользователь вводит имя пользователя, пароль и ответы сервера с результатом и токеном. Затем несколько действий (все они простираются от общей BaseActivity) выполняют тяжелые запросы.
У меня также есть класс ServiceManager, который отвечает за все запросы на обслуживание и запросы HTTP.
Я работаю над реализацией HttpResponseCache, чтобы уменьшить эту сетевую нагрузку. Сейчас у меня есть следующий код:
В моей LoginActivity-х (первый из которых запущен) OnCreate:
//HTTP cache
try {
File httpCacheDir = new File(this.getCacheDir(), "http");
long httpCacheSize = 10 * 1024 * 1024; //10 MiB
HttpResponseCache.install(httpCacheDir, httpCacheSize);
Log.d(TAG, "Cache installed");
} catch (IOException e) {
Log.i(TAG, "HTTP response cache installation failed:" + e);
}
В HTTPRequest функции моего ServiceManager, которая является один фактически выполняется каждый раз, когда я пытаюсь сделать запрос HTTP:
//HTTPS connection
URL requestedUrl = new URL(uri);
httpsConnection = (HttpURLConnection) requestedUrl.openConnection();
httpsConnection.setUseCaches(true);
httpsConnection.setDefaultUseCaches(true);
httpsConnection.setRequestMethod("GET");
BufferedReader br = new BufferedReader(
new InputStreamReader(httpsConnection.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
httpResponse += line;
}
br.close();
httpsConnection.disconnect();
HttpResponseCache cache = HttpResponseCache.getInstalled();
Log.d(TAG, "Cache: " + cache);
if (cache != null) {
Log.d(TAG, "Net count: " + cache.getNetworkCount());
Log.d(TAG, "Hit count: " + cache.getHitCount());
Log.d(TAG, "Request count: " + cache.getRequestCount());
cache.flush();
}
try{
URI uriCached = new URI("<myurl>");
CacheResponse cr = cache.get(uriCached, "GET", null);
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(cr.getBody()));
while ((line = br.readLine()) != null) {
Log.d(TAG, line);
}
} catch (URISyntaxException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
Прямо сейчас, так как на стороне сервера не готов, URL я делаю запросы к является всегда то же самое.
Как вы можете видеть, я отладки несколько вещей, эти результаты:
- Cache установлен
- Cache: [email protected]
- Net Количество: Х Количество
- Хит: 0
- Запрос Количество: X
- {myJson}
Как вы можете видеть, кеш способен читать мой JSON, когда я получаю его с помощью метода cache.get(), но он никогда не попадает.
Моей стороны сервера директива Cache-Control в заголовке ответа является: Cache-Control: общественный Cache-Control: макс возраст = 3800
Почему не кэш никогда не бил?
спасибо!