Android WebView 缓存详解
android webview 缓存详解
一. 两种缓存类型:
页面缓存:加载一个网页时的html、js、css等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置http响应头影响浏览器的行为才能间接地影响到这些缓存数据。 而缓存的索引放在:/data/data//databases 对应的文件放在:/data/data/package_name/cache/webviewcachechromunm下
数据缓存:分为appcache和dom storage两种 我们开发者可以自行控制的就是这些缓存资源
appcache:
我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。 尤其在涉及到应用于网站的多个页面上的css和javascript文件的时候非常有用。其大小目前通常是5m。 在android上需要手动开启(setappcacheenabled),并设置路径(setappcachepath)和容量 (setappcachemaxsize),而android中使用applicationcache.db来保存appcache数据!
dom storage:
存储一些简单的用key/value对即可解决的数据,根据作用范围的不同,有session storage和local storage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动 删除,否则数据永远不会过期)在android中可以手动开启dom storage(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: api level 17中已经废弃, 从api level 11开始作用同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缓存 */ public void clearwebviewcache(){ //清理webview缓存数据库 try { deletedatabase("webview.db"); deletedatabase("webviewcache.db"); } catch (exception e) { e.printstacktrace(); } //webview 缓存文件 file appcachedir = new file(getfilesdir().getabsolutepath()+app_cacahe_dirname); log.e(tag, "appcachedir path="+appcachedir.getabsolutepath()); file webviewcachedir = new file(getcachedir().getabsolutepath()+"/webviewcache"); log.e(tag, "webviewcachedir path="+webviewcachedir.getabsolutepath()); //删除webview 缓存目录 if(webviewcachedir.exists()){ deletefile(webviewcachedir); } //删除webview 缓存 缓存目录 if(appcachedir.exists()){ deletefile(appcachedir); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android NDK开发之:配置环境的详解
-
Android开发笔记之: 数据存储方式详解
-
Android笔记之:深入为从右向左语言定义复杂字串的详解
-
深入Android开发FAQ的详解
-
基于Android本地代码生成器详解
-
Android开发笔记之:Handler Runnable与Thread的区别详解
-
两分钟让你彻底明白Android Activity生命周期的详解(图文介绍)
-
Android开发笔记之:Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
-
Android开发笔记之:一分钟学会使用Logcat调试程序的详解
-
android如何获取view在布局中的高度与宽度详解