android 读取WebView缓存及清理WebView缓存

简介: 1.缓存的分类:首先要说的一点是缓存的分类,我们缓存的数据分为:页面缓存和数据缓存页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。

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)



先说一下网页缓存
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两个文件夹如下图如示:


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

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

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

[java] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. context.deleteDatabase("webview.db");      

[java] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. 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 withsetCacheMode(int).

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

 

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


2.缓存管理:

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

 

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

[java] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. File file = CacheManager.getCacheFileBaseDir();      
  2.   if (file != null && file.exists() && file.isDirectory()) { for (File item : file.listFiles()) { item.delete();      
  3.   }      
  4.   file.delete();      
  5.   }      
  6.   context.deleteDatabase("webview.db");      
  7.   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方法,循环迭代删除缓存文件夹!


更多实例请参考:http://www.android100.org/html/201409/07/63446.html

二、H5缓存

这个我还没有涉猎请参考:http://87426628.blog.163.com/blog/static/6069361820139183417725/

参考:


http://androiddada.iteye.com/blog/1280946


http://blog.csdn.net/coder_pig/article/details/48468969    

2.缓存管理:

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

 

目录
相关文章
|
9月前
|
缓存
Autojs4.1.0实战教程---快手极速版清理缓存
Autojs4.1.0实战教程---快手极速版清理缓存
340 1
|
缓存 JSON 前端开发
Web项目中,常用的几种清理浏览器缓存的方式
Web项目中,常用的几种清理浏览器缓存的方式
333 0
|
2月前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
215 78
|
4月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
115 15
Android 系统缓存扫描与清理方法分析
|
6月前
|
SQL 缓存 监控
实时计算 Flink版产品使用问题之怎么手动清理缓存或废弃文件
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8月前
|
缓存 分布式计算 关系型数据库
数据管理DMS操作报错合集之当进行RDS实例的可用区迁移时,提示“缓存清理”是什么意思
数据管理DMS(Data Management Service)是阿里云提供的数据库管理和运维服务,它支持多种数据库类型,包括RDS、PolarDB、MongoDB等。在使用DMS进行数据库操作时,可能会遇到各种报错情况。以下是一些常见的DMS操作报错及其可能的原因与解决措施的合集。
123 3
|
7月前
|
缓存
鸿蒙实现获取应用缓存和清理缓存
鸿蒙实现获取应用缓存和清理缓存
475 0
|
缓存
uniapp清理app缓存
uniapp清理app缓存
156 0
|
9月前
|
存储 缓存 Linux
linux 自动定时清理缓存
linux 自动定时清理缓存
332 0
|
9月前
|
缓存
AutoJS4.1.0实战教程 ---火火视频极速版签到、清理缓存和自动评论
AutoJS4.1.0实战教程 ---火火视频极速版签到、清理缓存和自动评论
72 0