WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即appcache)。

1.缓存的分类:

首先要说的一点是缓存的分类,我们缓存的数据分为:页面缓存和数据缓存

页面缓存:加载一个网页时的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)

image.png

先说一下网页缓存

1、缓存构成

/data/data/package_name/cache/

/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db

在项目中经常会使用到WebView控件,当加载html页面时,会在/data/data/应用package目录下生成database与cache两个文件夹如下图如示:

image.png

请求的url记录是保存在webviewCache.db,而url的内容是保存在webviewCache文件夹下.

所以清理的时候只需要把这几个文件夹下的文件删除就行了

//真机测试我用的是魅蓝5.1的系统,/data/data/应用package目录下找不到database文件用下面两句清理webview网页缓存的时候.但是每次执行都报false,

context.deleteDatabase("webview.db");

context.deleteDatabase("webviewCache.db");

嘿嘿,一目了然是吧~,对了另外还要说下几种缓存的模式:

LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据

LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。

LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同>->->- >- LOAD_DEFAULT模式

LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.

LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,

无网络时,使用LOAD_CACHE_ELSE_NETWORK。

而databases中的webviewCache.db 中放的就是图片地址和图片名字对应等信息 的表~ 导出后也可用SQLite Database Browser 等工具查看

1.优先缓存

好了,这里你是不是想问:既然这些图片已经存在手机缓存里面了,为什么Webview不能再把它显示出来呢?

这里我们需要设置下:

WebSettings webSettings= webView.getSettings();

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

//WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 默认不使用缓存!

LOAD_CACHE_ELSE_NETWORK的意思是:

Use cache if content is there, even if expired (eg, history nav) If it is not in the cache, load from network. Use with[setCacheMode(int)](http://androiddada.iteye.com/reference/android/webkit/WebSettings.html#setCacheMode%28int%29).

如果内容已经存在cache 则使用cache,即使是过去的历史记录。如果cache中不存在,从网络中获取!

所以加上这句,不仅可以使用cache离线显示用户浏览过的内容,还可以在有网络的情况下优先调用缓存,为用户减少流量!~

2.缓存管理:

(1)clearCacheFolder(Activity.getCacheDir(), System.currentTimeMillis());//删除此时之前的缓存.

在退出程序之前执行下面的代码:

File file = CacheManager.getCacheFileBaseDir();

if (file != null && file.exists() && file.isDirectory()) { for (File item : file.listFiles()) { item.delete();

}

file.delete();

}

context.deleteDatabase("webview.db");

context.deleteDatabase("webviewCache.db");

3.删除WebView的缓存数据

上面的示例,我们通过调用WebView的clearCache(true)方法,已经实现了对缓存的删除!

除了这种方法外,还有下述方法:

setting.setCacheMode(WebSettings.LOAD_NO_CACHE);

deleteDatabase(“WebView.db”);和deleteDatabase(“WebViewCache.db”);

webView.clearHistory();

webView.clearFormData();

getCacheDir().delete();

手动写delete方法,循环迭代删除缓存文件夹!

二、H5缓存

参考:

2.缓存管理:

(1)clearCacheFolder(Activity.getCacheDir(), System.currentTimeMillis());//删除此时之前的缓存.

android webview 清除缓存,android 读取WebView缓存及清理WebView缓存相关推荐

  1. mac清理视频缓存在哪里找和mac清理视频缓存怎么清理

    苹果电脑用久了,我们会发现mac电脑越用越慢,其实这种情况是正常的,电脑用久了会产生很多缓存,如果不及时清理会影响运行速度.那么mac清理视频缓存在哪里找?下面就和小编一起看看mac清理视频缓存怎么清 ...

  2. android edittext清除功能,Android:带一键清除功能的EditText

    作为一个前端应用开发者,下面这样的场景可以说是屡见不鲜了? 20181218135459.png 当然了,本文所要讲的重点不是如何做一个登录页面,而是输入框后面的那个清除按钮.你可能会说了,这有什么好 ...

  3. java 清理页面缓存数据_Web项目中,清理浏览器缓存的几种方式

    在B/S架构的项目中,访问web项目时,往往需要清理浏览器的缓存数据,js ,css 等等. //方法1:在引用的js ,css ,图片,等文件的url 处加一个变量,生成一个随机数字 //方法2:在 ...

  4. 华为手机内置存储android可以删除吗,手机内置储存怎么清理 手机缓存清理教程...

    手机内置储存怎么清理? 有时候,某些数据是会经常需要访问的,像硬盘内部的缓存(暂存器的一种)会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输,我们都知道手机安装应用都会产生 ...

  5. linux怎样关闭dns缓存,Linux设置DNS地址及清理DNS缓存方法

    阶段一:解析JSON "阶段一"是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 最近学到解析JSON格式的网络数据,而作业也要求自己找一个天气预报的AP ...

  6. Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片

    一.问题描述 使用LruCache.AsyncTask实现批量图片的加载并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)加载图片,并放入缓存中 2.及时移除 ...

  7. android picasso 三级缓存,Android中图片的三级缓存浅析

    图片的三级缓存机制一般是指应用加载图片的时候,分别去访问内存,文件和网络而获取图片数据的一种行为.以下内容只是简单的介绍了三级缓存的思想和大致流程,还有很多细节未进行处理,如果想深入研究可以在Gith ...

  8. android7.0清除缓存,iPhone7如何清理应用缓存 iphone7清理应用缓存教程

    手机使用后会留下一些缓存垃圾,那么 iPhone7如何清理应用缓存? 下面就带来iphone7清理应用缓存教程,一起来学习下. 方法1:强行重启 强行重启(也叫冷重启)能够帮助iOS的设备清理一下临时 ...

  9. 如何清理电脑缓存,分享4个简单方法!

    案例:如何清理电脑缓存 [朋友们!我感觉我电脑的内存已经严重不足了,想清理下电脑的缓存释放空间,却不知如何清理,大家有什么好的方法吗?] 经常使用电脑的朋友可能都会发现,好像我们没下载什么软件,但电脑 ...

  10. android数据存储心得,android学习心得 轻量级存储SharePreferences

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和St ...

最新文章

  1. 报告:AI技术正有效缩小亚洲医疗发展的差距
  2. 制作网站设计项目进度表让用户充分了解网站制作进程
  3. C#中几种换行符,不同操作系统各不相同【转】
  4. Taro+react开发(46)taro中环境判断
  5. 12 - java 类加载内存图
  6. 大写金额用计算机简单些,大写一到十怎么写 数字一到十的大写怎么写(开票用的大写)...
  7. 【python基础】h5py库的基本使用
  8. .gitignore释疑
  9. Win11任务栏不显示时间怎么办?Win11任务栏不显示时间的解决方法
  10. 详细Gitee(码云)使用方法
  11. 《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Windows版 - 1]
  12. 高炉炼铁车间人工巡视被淘汰是工业发展的必然
  13. 在Docker中使用Oracle 18c(12.2.0.2)
  14. 影响亚马逊cpc站内广告的排名因素主要有哪些呢?值得你一看!
  15. ArcGIS Earth 1.11版本发布啦!
  16. iOS cocos2d 2游戏开发实战(第3版)
  17. 数据库查询语句详细实例解析(以mysql为例)
  18. JavaScript -- 对象与原型链 [[Prototype]]
  19. STM32F103ZET6+TIMx定时器
  20. 微信小程序环境共享,多个小程序共享一个云开发数据库

热门文章

  1. docker容器获取宿主机ip地址
  2. 判断手机是否有虚拟键盘
  3. 个别网站打不开,但是别人能打开,手机能打开
  4. pytorch加载数据时中途卡死且未报错
  5. 全国计算机演示文稿,全国计算机统考押题——演示文稿
  6. 计算机如何删除桌面是的视频,Win10怎么彻底删除此电脑中的文档视频音乐文件夹[多图]...
  7. 边境的悍匪—Kaggle—泰坦尼克号生还预测详细教程
  8. 这9个技巧让你的PyTorch模型训练得飞快!
  9. 服务器网站中断,如何解决无法打开网页及服务器已断开连接的问题?
  10. mysql new用法_MySQL触发器之 new 和 old 的理解