Можно ли использовать Android 4 HttpResponseCache с помощью приложения на основе WebView?

Я работаю над приложением на основе WebView, которое в настоящее время работает на v3.1-планшетах. Кажется, я не могу заставить WebView кэшировать css, js и изображения (или использовать кеш). Кажется, что приложение подключается к серверу, который возвращает ответ 304 (HTML-страницы динамичны и всегда должны использовать сервер).

Мне было интересно, работает ли HttpResponseCache (доступный под v4) с WebViewClient или же WebView должен уже управлять кешированием ресурсов HTTP.

Благодарю.

После некоторого теста я выяснил, что на уровне Android Webkit не используется URLConnection для HTTP-запроса, что означает, что HttpResponseCache не может автоматически подключаться к WebView как к другим родным сценариям.

Поэтому я попробовал альтернативный подход: используйте собственный WebViewClient для соединения WebView и ResponseCache:

webview.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(final WebView view, final String url) { if (! (url.startsWith("http://") || url.startsWith("https://")) || ResponseCache.getDefault() == null) return null; try { final HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.connect(); final String content_type = connection.getContentType(); final String separator = "; charset="; final int pos = content_type.indexOf(separator); // TODO: Better protocol compatibility final String mime_type = pos >= 0 ? content_type.substring(0, pos) : content_type; final String encoding = pos >= 0 ? content_type.substring(pos + separator.length()) : "UTF-8"; return new WebResourceResponse(mime_type, encoding, connection.getInputStream()); } catch (final MalformedURLException e) { e.printStackTrace(); return null; } catch (final IOException e) { e.printStackTrace(); return null; } } }); 

Когда вам нужен автономный доступ к кэшированным ресурсам, просто добавьте заголовок кеша:

 connection.addRequestProperty("Cache-Control", "max-stale=" + stale_tolerance); 

BTW, чтобы этот подход работал правильно, вам нужно правильно настроить ответ веб-сервера с помощью заголовка «Cache-Control» с кешем.