Intereting Posts
Как найти последнюю активность, с которой текущая активность открывается в android? В onTouchEvent ACTION_UP не работает Одновременное чтение и запись SQLite Список подключенных устройств Bluetooth? AIR 3 Родные расширения для Android – Могу ли я / Как включить сторонние библиотеки? Какие криптоалгоритмы поддерживают Android? Применить тему к активности в Android? Эмулятор Genymotion: Ошибка установки: INSTALL_FAILED_MISSING_SHARED_LIBRARY Как динамически получать изображения из выпадающей папки Фрагменты ViewPager – переходы с общим элементом Почему в пользовательской учетной записи Android не отображается «Учетные записи и настройки»? Как отправить уведомление устройства на устройство с помощью FCM без использования XMPP или любого другого скрипта.? Как воспроизвести звук родной камеры на Android Дата получения последних 7 дней с текущего в Android Отображать изображение по умолчанию NetworkImageView без запроса сети

Android Webview – полностью очистить кэш

У меня есть WebView в одном из моих действий, и когда он загружает веб-страницу, страница собирает некоторые фоновые данные из Facebook.

Тем не менее, я вижу, что страница, отображаемая в приложении, одинакова при каждом открытии и обновлении приложения.

Я попытался настроить WebView на использование кеша и очистить кеш и историю WebView.

Я также следил за предложением здесь: как очистить кеш для WebView?

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

mWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { if(progress >= 100) { mProgressBar.setVisibility(ProgressBar.INVISIBLE); } else { mProgressBar.setVisibility(ProgressBar.VISIBLE); } } }); mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler)); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.clearHistory(); mWebView.clearFormData(); mWebView.clearCache(true); WebSettings webSettings = mWebView.getSettings(); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); Time time = new Time(); time.setToNow(); mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S")); 

Поэтому я внедрил первое предложение (хотя измененный код был рекурсивным)

 private void clearApplicationCache() { File dir = getCacheDir(); if(dir!= null && dir.isDirectory()) { try { ArrayList<File> stack = new ArrayList<File>(); // Initialise the list File[] children = dir.listFiles(); for(File child:children) { stack.add(child); } while(stack.size() > 0) { Log.v(TAG, LOG_START+"Clearing the stack - " + stack.size()); File f = stack.get(stack.size() - 1); if(f.isDirectory() == true) { boolean empty = f.delete(); if(empty == false) { File[] files = f.listFiles(); if(files.length != 0) { for(File tmp:files) { stack.add(tmp); } } } else { stack.remove(stack.size() - 1); } } else { f.delete(); stack.remove(stack.size() - 1); } } } catch(Exception e) { Log.e(TAG, LOG_START+"Failed to clean the cache"); } } } 

Однако это еще не изменило то, что отображается на странице. В моем браузере на рабочем столе я получаю разный HTML-код на веб-страницу, созданный в WebView, поэтому я знаю, что WebView должен где-то кэшироваться.

На канале IRC я ​​указал на исправление для удаления кеширования из URL-соединения, но пока не вижу, как применить его к WebView.

http://www.androidsnippets.org/snippets/45/

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

Solutions Collecting From Web of "Android Webview – полностью очистить кэш"

Отредактированный фрагмент кода выше, опубликованный Gaunt Face, содержит ошибку в том, что если каталог не удаляется, поскольку один из его файлов не может быть удален, код будет продолжать повторять в бесконечном цикле. Я переписал его, чтобы быть действительно рекурсивным, и добавил параметр numDays, чтобы вы могли контролировать, сколько лет файлы должны быть обрезаны:

 //helper method for clearCache() , recursive //returns number of deleted files static int clearCacheFolder(final File dir, final int numDays) { int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { //first delete subdirectories recursively if (child.isDirectory()) { deletedFiles += clearCacheFolder(child, numDays); } //then delete the files and subdirectories in this dir //only empty directories can be deleted, so subdirs have been done first if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) { if (child.delete()) { deletedFiles++; } } } } catch(Exception e) { Log.e(TAG, String.format("Failed to clean the cache, error %s", e.getMessage())); } } return deletedFiles; } /* * Delete the files older than numDays days from the application cache * 0 means all files. */ public static void clearCache(final Context context, final int numDays) { Log.i(TAG, String.format("Starting cache prune, deleting files older than %d days", numDays)); int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays); Log.i(TAG, String.format("Cache pruning completed, %d files deleted", numDeletedFiles)); } 

Надеюсь, что с другими людьми 🙂

Я нашел даже элегантное и простое решение для очистки кеша

 WebView obj; obj.clearCache(true); 

http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29

Я пытался выяснить, как очистить кеш, но все, что мы могли сделать из вышеупомянутых методов, – удалить локальные файлы, но он никогда не очищает ОЗУ.

API clearCache, освобождает RAM, используемую веб-просмотром, и, следовательно, требует перезагрузки веб-страницы.

Я нашел исправление, которое вы искали:

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

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

И не волнуйтесь, эти БД просто связаны с вашим приложением, поэтому вы не очищаете кеш всего телефона.

Чтобы очистить все кэши веб-кэшей, пока вы подписываете форму своего APP:

 CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); 

Для Lollypop и выше:

 removeAllCookies(ValueCallback) 

Это должно очистить кеш приложений, который должен находиться в кеше вашего веб-браузера.

 File dir = getActivity().getCacheDir(); if (dir != null && dir.isDirectory()) { try { File[] children = dir.listFiles(); if (children.length > 0) { for (int i = 0; i < children.length; i++) { File[] temp = children[i].listFiles(); for (int x = 0; x < temp.length; x++) { temp[x].delete(); } } } } catch (Exception e) { Log.e("Cache", "failed cache clean"); } } 

Чтобы очистить историю, просто выполните:

 this.appView.clearHistory(); 

Источник: http://developer.android.com/reference/android/webkit/WebView.html

Убедитесь, что вы используете метод ниже, чтобы данные формы не отображались как autopop при нажатии на поля ввода.

 getSettings().setSaveFormData(false);