欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android WebView 缓存详解

程序员文章站 2023-10-19 21:09:37
 android webview 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、js、css等页面或者资源数据,这些缓存资源是由于浏...

 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);
  }
}  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!