webview的缓存

标签: webview的缓存

缓存模式

  • 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 对来提供

特点

image

应用场景

存储 复杂、数据量大的结构化数据

具体实现

// 通过设置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缓存机制

转自:Android:手把手教你构建 全面的WebView 缓存机制 & 资源加载方案

原文链接:加载失败,请重新获取