2014-12-16 2 views
3

Я создаю гибридное приложение, в котором пользовательский интерфейс находится на сервере, и я использую webview в своем приложении и использую собственные функции только там, где это необходимо (где требуется доступ к аппаратным средствам).Android Webview Загрузка ресурсов с истекшего кэша

Моя проблема Иногда Webview загружает ресурсы из кеша, даже когда новые ресурсы (например, javascript и т. Д.) Загружаются на сервер. Я не сталкиваюсь с этой проблемой, когда одновременно открываю один и тот же URL-адрес из браузера на компьютере. Как я могу убедиться, что веб-просмотр обновит его содержимое с сервера. Это поведение также не предсказуемо, так как веб-просмотр в конечном итоге обновляет его кеш, но после многих загрузок страниц.

Очистка кеша при каждом запуске или режиме LOAD_NO_CACHE не является вариантом, поскольку я хочу использовать функции кеша (но не рискуя загружать старые ресурсы из кеша, когда новые доступны на сервере).

Это код фрагмента. browser.loadURL(); вызывается в другом месте в применении

browser = (WebView) findViewById(R.id.browser); 
    progress_bar = (ProgressBar) findViewById(R.id.progressBar1); 


    browser.getSettings().setSavePassword(false); 
    browser.getSettings().setJavaScriptEnabled(true); 

    browser.setWebChromeClient(....) 
    browser.setWebViewClient(....) // omitted complete functions to save space 

ответ

2

Что-то я сделал на веб-приложение было добавить Ложное флаг версии в мой JavaScript и CSS файлы в теги сценария и ссылок. Таким образом, это выглядело примерно так на веб-странице. Это заставляет браузер думать, что ресурсы разные, и заставляет его перезагрузить его.

<link href="./css/my_style.css?version=1.0" rel="stylesheet" type="text/css" /> 
<script src="./js/my_script.js?version=1.3" type="text/javascript"></script> 

Если вы хотите контролировать это на стороне приложения. В файле SharedPreferences вы можете добавить своего рода «срок действия». Я делаю это для кеша изображения, который у меня есть в некоторых приложениях. В основном, вы очищаете кеш, когда эта дата проходит. Это будет выглядеть примерно так.

String expireDateString = getSharedPreferences("WebviewExpireCache", Context.MODE_PRIVATE); 
Date today = new Date(); 
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); 
if(today.after(format.parse(expireDateString))){ 
    browser.clearCache(true); 
} 
Смежные вопросы