Android WebView 缓存详解
AndroidWebView缓存详解
一.两种缓存类型:
页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。而缓存的索引放在:/data/data//databases对应的文件放在:/data/data/package_name/cache/webviewCacheChromunm下
数据缓存:分为AppCache和DOMStorage两种我们开发者可以自行控制的就是这些缓存资源
AppCache:
我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。尤其在涉及到应用于网站的多个页面上的CSS和JavaScript文件的时候非常有用。其大小目前通常是5M。在Android上需要手动开启(setAppCacheEnabled),并设置路径(setAppCachePath)和容量(setAppCacheMaxSize),而android中使用ApplicationCache.db来保存AppCache数据!
DOMStorage:
存储一些简单的用key/value对即可解决的数据,根据作用范围的不同,有SessionStorage和LocalStorage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动删除,否则数据永远不会过期)在Android中可以手动开启DOMStorage(setDomStorageEnabled),设置存储路径(setDatabasePath)Android中Webkit会为DOMStorage产生两个文件(my_path/localstorage/http_blog.csdn.net_0.localstorage和my_path/Databases.db)
二、WebView的5种缓存模式:
LOAD_NO_CACHE:不使用缓存,只从网络获取数据
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据
LOAD_CACHE_NORMAL:APIlevel17中已经废弃,从APIlevel11开始作用同LOAD_DEFAULT模式
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据
三、WebView缓存模式的设置:
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);//或其他模式
根据需求缓存策略可为:判断是否有网络 有:使用LOAD_DEFAULT/LOAD_NO_CACHE
无:使用LOAD_CACHE_ELSE_NETWORK
四、删除缓存数据:
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.clearCache(true);
webView.clearHistory();
webView.clearFormData();
/**
*清除WebView缓存
*/
publicvoidclearWebViewCache(){
//清理Webview缓存数据库
try{
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
}catch(Exceptione){
e.printStackTrace();
}
//WebView缓存文件
FileappCacheDir=newFile(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
Log.e(TAG,"appCacheDirpath="+appCacheDir.getAbsolutePath());
FilewebviewCacheDir=newFile(getCacheDir().getAbsolutePath()+"/webviewCache");
Log.e(TAG,"webviewCacheDirpath="+webviewCacheDir.getAbsolutePath());
//删除webview缓存目录
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
//删除webview缓存缓存目录
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!