Я использую WebViews в приложении для Android, и мне нужно предотвратить кэширование WebView.
К сожалению, похоже, что эта, казалось бы, простая цель почти невозможна. Решением, к которому я прибегал, является выполнение webview.clearCache(true) в событии onPageFinished, так что кеш очищается каждый раз, когда загружается страница. Есть некоторые проблемы...
Я заметил, что по мере роста кеша становится очень трудоемким для выполнения метода clearCache. Иногда, если вы выполняете clearCache, а затем переключаетесь на другое действие, которое содержит другое веб-представление, этот веб-просмотр не будет загружаться в течение нескольких секунд, потому что он все еще ждет завершения предыдущей операции clearCache.
Что еще хуже, время выполнения последующих вызовов clearCache, похоже, не уменьшается после того, как кеш уже очищен. Если вызов clearCache занимает 3 секунды, а затем я сразу вызываю clearCache второй раз, тогда я ожидаю, что второй вызов clearCache завершится почти сразу. Но это не то, что я испытываю; Я испытываю, что второй вызов clearCache по-прежнему занимает приблизительно 3 секунды.
Кто-нибудь еще испытал это? Есть ли способ повысить производительность? Ожидание 2-3 секунд для загрузки webview (из локальной файловой системы) ужасно.
EDIT:
Вот моя лучшая альтернатива фактическому очистке кеша. Это более или менее работает, но это вроде flaky, и я не на 100% доволен этим (написано в Mono С#):
public class NoCacheWebClient : WebViewClient
{
string previous;
public override void OnPageStarted(WebView view, string url, Android.Graphics.Bitmap favicon)
{
base.OnPageStarted(view, url, favicon);
if (!string.Equals(previous, url))
{
previous = url;
view.Reload(); //re-load once to ignore cache
}
else
{
previous = null;
}
}
}