Предотвращение кэширования данных Android WebView - PullRequest
16 голосов
/ 24 сентября 2011

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

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

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

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

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

Ответы [ 2 ]

40 голосов
/ 22 мая 2012

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

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);

Удачи!

12 голосов
/ 12 декабря 2013

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

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

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

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