Android webview очистить кэш
У меня есть приложение для Android, в котором просто находится веб-сайт. Я хотел бы, чтобы приложение кэшировало страницы веб-сайта для использования в автономном режиме.
Я делаю простой тест, чтобы проверить, работает ли кеш, но, к сожалению, он не загружает страницу, которую я ранее загружал в онлайн-режиме, когда отключен. Чтобы сделать все более ясным, я загружаю следующие 2 страницы в онлайн-режиме.
Может ли кто-нибудь сказать мне, почему веб-просмотр не кэширует загруженную страницу для последующего использования в автономном режиме?
Вот основное действие, и я расширил объект Application, определяющий путь appcachepath.
. Это регистрация, когда приложение загружается в онлайн-режиме
Это журнал, когда я вышел из приложения, отключил сетевой адаптер, а затем вернулся в приложение в автономном режиме.
[Edit1] Собственно, при ближайшем рассмотрении регистрации, похоже, она изменилась при загрузке в онлайн-режиме. Ниже – logcat в режиме omline. Кажется, что проблема с хранилищем кешей.
Если я, тем не менее, изменяюсь на следующие URL-адреса, отображается моя страница SO. Если я нажму ссылку на мою страницу бонусов (эта страница), а затем откройте ее в автономном режиме, страница SO будет отображаться так, как вы ожидали, но если вы нажмете ссылку «Баунти» в автономном режиме, она появится. Поэтому существуют различия между сайтом SO и сайтом bmi.
Это не точный ответ на ваш вопрос, поскольку вы спрашиваете о кеше веб-просмотра. Но он может достичь того же результата.
Это более гибкий подход, так как вы контролируете загрузку, экономию и многое другое.
Результат запроса get может быть сохранен в строке постоянно в sharedpreferences, и это будет HTML, который ваш php отображает.
В вашем жизненном цикле Android вы можете определить, находится ли приложение в автономном режиме, а если он отключен, вы можете загрузить последнюю сохраненную версию сайта из строки
webview.loadData(yourSavedString, "text/html", "UTF-8");
Хотя, если есть изображения, вам нужно будет сделать дополнительные соображения, но если изображения не являются динамическими, вы можете сохранить их в папке с активами приложения и заменить URL-адрес в сохраненной строке местоположениями ресурсов.
Хотя он не решает, почему ваш веб-просмотр не кэшируется, он выполнит ту же конечную цель или просмотрит страницу в автономном режиме
Другой очень гибкий и мощный вариант может использовать HTML5 для управления кэшированием в вашем приложении.
Вы можете просто включить кеширование в своем приложении и управлять кешированием с самого веб-сайта.
С наилучшими пожеланиями
Его мало Глупо, что это работает. В URL-адресе есть перенаправление
Ты должен попытаться
Бывают случаи, когда WebView нельзя кэшировать изначально. Если заголовок страницы содержит следующие поля, WebView не сможет кэшировать содержимое с этой страницы.
В этом случае вам придется изменить свойство страницы на сервере, чтобы решить проблему кэширования.
у меня есть WebView в одном из моих действий, и когда он загружает веб-страницу, страница собирает некоторые фоновые данные из Facebook.
то, что я вижу, хотя, страница, отображаемая в приложении, одинакова при каждом открытии и обновлении приложения.
Я попытался настроить WebView не использовать кэш и очистить кэш и историю WebView.
Я также следовал предложению здесь:Как очистить кэш на Объект WebView?
но ничего из этого не работает, у кого-нибудь есть идеи как я могу преодолеть эту проблему, потому что это жизненно важная часть моего заявления.
поэтому я реализовал первое предложение (хотя изменил код, чтобы быть рекурсивным)
однако это все еще не изменило то, что отображается на странице. В моем настольном браузере я получаю другой html-код на веб-страницу, созданную в WebView, поэтому я знаю, что WebView должен кэшироваться где-то.
на IRC-канале мне указали на исправление для удаления кэширования из URL-соединения, но пока не видно, как применить его к WebView.
Если я удалю свое приложение и переустановлю его, я смогу обновить веб-страницу, т. е. не кэшированную версию. Основная проблема заключается в том, что изменения вносятся в ссылки на веб-странице, поэтому передняя часть веб-страницы полностью не изменяется.
отредактированный фрагмент кода выше, опубликованный Gaunt Face, содержит ошибку в том, что если каталог не удается удалить, потому что один из его файлов не может быть удален, код будет продолжать повторную попытку в бесконечном цикле. Я переписал его, чтобы быть действительно рекурсивным, и добавил параметр numDays, чтобы вы могли контролировать, сколько лет должны быть файлы, которые обрезаны:
надеюсь, пригодится другим людям:)
Я нашел еще элегантное и простое решение для очистки кэша
Я пытался выяснить, как очистить кэш, но все, что мы могли сделать из вышеупомянутых методов, это удалить локальные файлы, но он никогда не очищает ОЗУ.
API clearCache, освобождает ОЗУ, используемую webview, и, следовательно, санкционирует, что страница снова загружается.
Я нашел исправление, которое вы искали:
по какой-то причине Android делает плохой кэш url, который он продолжает возвращать случайно вместо новых данных, которые вам нужны. Конечно, вы можете просто удалить записи из БД, но в моем случае я пытаюсь получить доступ только к одному URL-адресу, поэтому сдуть всю БД проще.
и не волнуйтесь, эти DBs просто связаны с вашим приложением, поэтому вы не очищаете кэш всего телефона.
чтобы очистить все кэши webview во время выхода из приложения:
для Lollipop и выше:
Это должно очистить кэш приложений, который должен быть там, где ваш кэш webview
очистить историю, просто:
убедитесь, что вы используете метод ниже, чтобы данные формы не отображались как autopop при нажатии на поля ввода.
Я пытаюсь получить автономную кэшированную версию HTML5 веб-сайта для отображения, когда сеть находится внутри webview.
как я могу получить его для отображения HTML5 кэшированной версии страницы? Автономное хранилище webapp определенно работает, так как оно отлично работает в настольной версии Firefox и Chrome.
Я знаю, что могу позвонить loadData в представление вручную в onReceivedError , но я не уверен, где я могу получить кэшированное значение HTML5.
Примечание: Если я установил некоторые фиктивные данные в loadData например view.loadData(Uri.encode("
вот несколько строк кода, которые я добавил для настройки webview:
попробуйте узнать состояние сети с помощью
Это также необходимо
в вашем AndroidManifest.в XML
Теперь вы можете установить поведение кэша либо LOAD_CACHE_ONLY или LOAD_NO_CACHE, в зависимости от того, доступно ли сетевое соединение, с
Я думаю, что хорошим решением было бы использовать LOAD_NORMAL и onReceivedError для навигации назад. Я думаю, что это загрузит кэш в соответствии с документацией (не уверен, правильно ли я помню), но будьте осторожны, чтобы не застрять в бесконечном цикле
Это странно.. Согласно документация:
переопределить способ использования кэша. Способ использования кэша основан на опции навигации. Для нормальной загрузки страницы, кэш проверяемый и содержание повторно проверяется по мере необходимости. При перемещении назад содержимое не пересматривается, вместо этого содержимое просто извлекается из кэша. Эта функция позволяет клиенту переопределить это поведение.
однако поведение, которое вы хотите, не кажется одним из них:
использовать кэш, если контент есть, даже если истек (например, история nav), если его нет в кэше, загрузите из сети.
Не используйте сеть, загружайте только из кэша.
шаблон использования кэша по умолчанию
обычное использование кэша шаблон
Не используйте кэш, загрузите из сети
Я не знаю, можете ли вы подкласс WebView получить желаемый поток.
. и браузер должен автоматически использовать его, когда нет подключения, вам не нужно менять какие-либо настройки вообще.
вы должны сначала установить разрешение в AndroidManifest.в XML
затем проверьте интернет-сеть включена или выключена:
наконец добавьте ниже код с вашим объект WebView объект
это если интернет вашей веб-страницы открыть нормальную версию и сохранены в кэше, и если ваш интернет отключен затем он автоматически открыть в кэш версия.
У меня есть WebView в одном из моих действий, и когда он загружает веб-страницу, страница собирает некоторые фоновые данные из Facebook.
Тем не менее, я вижу, что страница, отображаемая в приложении, одинакова при каждом открытии и обновлении приложения.
Я попытался настроить WebView на использование кеша и очистить кеш и историю WebView.
Я также следил за предложением здесь: как очистить кеш для WebView?
Но ничто из этого не работает, есть ли у кого-нибудь идеи, что я могу решить эту проблему, потому что это важная часть моего приложения.
Поэтому я внедрил первое предложение (хотя измененный код был рекурсивным)
Однако это еще не изменило то, что отображается на странице. В моем браузере на рабочем столе я получаю разный HTML-код на веб-страницу, созданный в WebView, поэтому я знаю, что WebView должен где-то кэшироваться.
На канале IRC я указал на исправление для удаления кеширования из URL-соединения, но пока не вижу, как применить его к WebView.
Если я удалю свое приложение и переустановит его, я смогу обновить веб-страницу до текущей версии, то есть не кэшированную версию. Основная проблема заключается в внесении изменений в ссылки на веб-странице, поэтому внешний интерфейс веб-страницы полностью не изменяется.
Отредактированный фрагмент кода выше, опубликованный Gaunt Face, содержит ошибку в том, что если каталог не удаляется, поскольку один из его файлов не может быть удален, код будет продолжать повторять в бесконечном цикле. Я переписал его, чтобы быть действительно рекурсивным, и добавил параметр numDays, чтобы вы могли контролировать, сколько лет файлы должны быть обрезаны:
Надеюсь, что с другими людьми 🙂
Я нашел даже элегантное и простое решение для очистки кеша
Я пытался выяснить, как очистить кеш, но все, что мы могли сделать из вышеупомянутых методов, – удалить локальные файлы, но он никогда не очищает ОЗУ.
API clearCache, освобождает RAM, используемую веб-просмотром, и, следовательно, требует перезагрузки веб-страницы.
Я нашел исправление, которое вы искали:
По какой-то причине Android делает плохой кэш URL-адреса, который он продолжает возвращать случайно, а не новые данные, которые вам нужны. Конечно, вы могли бы просто удалить записи из БД, но в моем случае я только пытаюсь получить доступ к одному URL-адресу, чтобы просто удалить всю БД.
И не волнуйтесь, эти БД просто связаны с вашим приложением, поэтому вы не очищаете кеш всего телефона.
Чтобы очистить все кэши веб-кэшей, пока вы подписываете форму своего APP:
Для Lollypop и выше:
Это должно очистить кеш приложений, который должен находиться в кеше вашего веб-браузера.
Чтобы очистить историю, просто выполните:
Убедитесь, что вы используете метод ниже, чтобы данные формы не отображались как autopop при нажатии на поля ввода.
Android System WebView
Версия: 101.0.4951.61
Последнее обновление программы в шапке: 10.05.2022
Краткое описание:
Системный компонент Android для обработки веб-контента в приложениях Android.
Системный компонент Android WebView работает на базе технологий Chrome и позволяет просматривать веб-контент в приложениях Android. Он уже установлен на вашем устройстве. Чтобы обеспечить его безопасность и высокую производительность, не забывайте обновлять его.
Android System WebView что это?
Почему так много вопросов, что это за штука такая? О, ответ прост – информации по ней немного, а все комментарии, в которых обычно пользователи разъясняют спорные моменты, по нашим русским традициям забиты шутками с разной долей юмора.
На самом деле, сущность Android System WebView предельная ясна – это системный компонент, аналог веб-браузера, благодаря которому вы можете просматривать страницы. Он с самого начала будет установлен на вашем устройстве и единственное, что от вас нужно, так это его обновление. С помощью WebView вы сможете отобразить любой контент на смартфоне, включая ваш собственный. Построен этот компонент на движке WebKit, что позволяет ему загружать страницы так же, как Chrome или Safari. В общем, вещь необходимая, тем более, что платить за неё не надо.
Однако в ней есть и проблемы. Во-первых, пользователи жалуются, что порой WebView до неприличного много жрёт памяти, и отобрать свои родимые мегабайты не так-то просто. Универсальное решение трабла так и не найдено. Во-вторых, отказ выпуска обновлений для более старых версий андроида, начиная с 4.3. Причины? «Не хотим и не будем пересматривать код». При этом любому понятно, что уязвимость движка браузера означает уязвимость приложений системы – все они так или иначе с ним связаны.
Источник>>
Читайте также: