缓存模式
- LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
- LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
- LOAD_DEFAULT:
(默认)根据cache-control决定是否从网络上取数据。 - LOAD_CACHE_ELSE_NETWORK
只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据
Android WebView自带的缓存机制有5种:
浏览器缓存机制
根据HTTP协议头里的Cache-Control(或Expires和Last-Modified(或Etag)等字段来控制文件缓存的机制
Cache-Control:用于控制文件在本地缓存有效时长。
Expires:与Cache-Control功能相同,即控制缓存的有效时间
Last-Modified:标识文件在服务器上的最新更新时间
Etag:功能同Last-Modified,即标识文件在服务器上的最新更新时间。
应用场景
静态资源文件的存储,如JS、CSS、字体、图片等。
Android Webview会将缓存的文件记录及文件内容会存在当前 app 的 data 目录中。
具体实现
Android WebView内置自动实现,即不需要设置即实现
常见用法是:
* Cache-Control与Last-Modified一起使用;用于控制缓存有效时间
* Expires与Etag一起使用;用于在缓存失效后,向服务查询是否有更新
特点
* 优点:支持 Http协议层
* 不足:缓存文件需要首次加载后才会产生;浏览器缓存的存储空间有限,缓存有被清除的可能;缓存的文件没有校验。
Application Cache 缓存机制
- 以文件为单位进行缓存,且文件有一定更新机制(类似于浏览器缓存机制)
- AppCache 原理有两个关键点:manifest 属性和 manifest 文件。
特点
专门为Web App离线使用而开发的缓存机制
应用场景
存储静态文件(如JS、CSS、字体文件)
是对浏览器缓存机制的补充,不是替代。
具体实现
// 通过设置WebView的settings来实现
WebSettings settings = getSettings();
// 设置缓存路径
String cacheDirPath = context.getFilesDir().getAbsolutePath()+"cache/";
settings.setAppCachePath(cacheDirPath);
// 设置缓存大小
settings.setAppCacheMaxSize(20*1024*1024);
//开启Application Cache存储机制
settings.setAppCacheEnabled(true);
//注意每个Application 只调用一次 WebSettings.setAppCachePath()和WebSettings.setAppCacheMaxSize()
Dom Storage 缓存机制
通过存储字符串的 Key - Value 对来提供
DOM Storage 分为 sessionStorage & localStorage; 二者使用方法基本相同,区别在于作用范围不同:
a. sessionStorage:具备临时性,即存储与页面相关的数据,它在页面关闭后无法使用
b. localStorage:具备持久性,即保存的数据在页面关闭后也可以使用。
特点
* 存储空间大( 5MB):存储空间对于不同浏览器不同,如Cookies 才 4KB
* 存储安全、便捷:Dom Storage存储的数据在
本地,不需要经常和服务器进行交互
应用场景
存储临时、简单的数据
具体实现
// 通过设置 `WebView`的`Settings`类实现
WebSettings settings = getSettings();
// 开启DOM storage
settings.setDomStorageEnabled(true);
Indexed Database 缓存机制
属于 NoSQL 数据库,通过存储字符串的 Key - Value 对来提供
特点
应用场景
存储 复杂、数据量大的结构化数据
具体实现:
// 通过设置WebView的settings实现
WebSettings settings = getSettings();
// 只需设置支持JS就自动打开IndexedDB存储机制
// Android 在4.4开始加入对 IndexedDB 的支持,只需打开允许 JS 执行的开关就好了。
settings.setJavaScriptEnabled(true);
Web SQL Database 缓存机制
基于 SQL 的数据库存储机制
特点
充分利用数据库的优势,可方便对数据进行增加、删除、修改、查询
应用场景
存储适合数据库的结构化数据
具体实现
// 通过设置WebView的settings实现
WebSettings settings = getSettings();
// 设置缓存路径
String cacheDirPath = context.getFilesDir().getAbsolutePath()+"cache/";
settings.setDatabasePath(cacheDirPath);
// 开启 数据库存储机制
settings.setDatabaseEnabled(true);
==注==:Web SQL Database存储机制不再推荐使用(不再维护)
取而代之的是 IndexedDB缓存机制