Предотвращение кэширования данных Android WebView

Можно ли предотвратить кэширование WebView в /data/data/???/cache/webViewCache? Я установил следующее в WebSettings, но папка кэша все еще используется:

webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setAppCacheEnabled(false);

Я заметил, что файлы кеша удаляются при выходе приложения или когда приложение переходит в фоновый режим, но я бы предпочел, чтобы они вообще не создавались. Кроме того, я хотел бы предотвратить использование webview.db и webviewCache.db в базе данных /data/data/???/. В настоящее время я удаляю базы данных следующим образом:

context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db");

Кажется, что он имеет желаемый эффект, и файлы, кажется, снова не создаются для использования. Можно ли предположить, что это так?

Ответы

Ответ 1

Заметки на этой странице заставляют меня думать, что они не хотят, чтобы у вас был прекрасный доступ к кешу:

http://developer.android.com/reference/android/webkit/CacheManager.html

Насколько я могу судить, есть (по крайней мере) два способа хранения кеша. Я ничего не написал в приложении, поэтому никаких гарантий:

(1) Каждый раз, когда ваш WebView заканчивает страницу, очистите кеш. Что-то вроде этого в вашем WebViewClient:

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}

(2) Если вам не все равно, что хранится, но просто хотите получить последний контент, вы можете достичь этого, установив правильные заголовки http на loadUrl (очевидно, вы хотите протестировать это против ваш сервер). Кроме того, это доступно только для Android API 8 +

    Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
    noCacheHeaders.put("Pragma", "no-cache");
    noCacheHeaders.put("Cache-Control", "no-cache");
    view.loadUrl(url, noCacheHeaders);

Возможно, вы пробовали это, но, возможно, также установите размер кэша WebView на что-то маленькое. Я не уверен, что 0 будет работать, возможно, 1:

wv.getSettings().setAppCacheMaxSize(1);

Удачи!

Ответ 2

В моем приложении (на Android 4.2.2) я загружаю веб-страницу на веб-страницу с изображениями, которые я могу изменить во время выполнения (я заменяю изображения, сохраняя путь). Решение Мэтта (1)

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}

работает для меня, решение (2) нет! Приветствия