`
libo19881179
  • 浏览: 268607 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【so easy~】 Webview离线功能(优先cache缓存+cache缓存管理)!

阅读更多

在做Webview显示服务器的html功能时 需要加入离线功能。

http://androiddada.iteye.com/

开始思路很狭隘,以为一定应该是从服务器得到的html文件,下载到本地后加载~

但是这样不能离线查看图片,因为图片数据并不再html中,只是连接地址。

后来,经过上网各种搜寻学习,发现原来Webview有自己的缓存,如图:

 



 在手机本地 data/data/包名/cache/webviewCache 中放的是Webview显示过的图片。我们可以把它导出,后缀改成对应图片的格式 打开看看~

 

而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).

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

 

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

 

我有些费解的是,这个设置在我看来是很有利于用户体验的 为什么google不把它设置成默认的呢? 还需要开发者手动打开。猜想可能是因为相同页面可能会更新的原因!

 

如果离线加载出现乱码 可参考: http://androidturing.iteye.com/blog/1280656

 

http://androiddada.iteye.com/

2.缓存管理:

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

 

 

// clear the cache before time numDays  
private int clearCacheFolder(File dir, long numDays) {   
int deletedFiles = 0;   
if (dir!= null && dir.isDirectory()) {   
try {   
for (File child:dir.listFiles()) {   
if (child.isDirectory()) {   
deletedFiles += clearCacheFolder(child, numDays);  
}  
  
if (child.lastModified() < numDays) {   
if (child.delete()) {   
deletedFiles++;  
}  
}  
}  
} catch(Exception e) {   
e.printStackTrace();  
}  
}  
return deletedFiles;   
}  

 

(2) 退出应用前删除缓存的方法!

 

 

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");  
  • 大小: 10.6 KB
分享到:
评论
3 楼 asialee900715 2014-04-27  
现在的缓存惯例好像已经不是用数据库来惯例的了,想请问一下,现在要做到读取webview的缓存才怎么弄呢?
2 楼 黑洞风 2013-09-11  
这只是缓存阅读过的,有没有批量缓存的啊?不管有没有阅读过都需要缓存
1 楼 hackermaomao 2012-03-27  
太感谢了,做RSS阅读器 正好用到这个

相关推荐

    ios-WebView离线缓存.zip

    本项目“ios-WebView离线缓存.zip”主要探讨的是如何利用YYCache和系统提供的NSURLProtocol实现WebView的离线缓存功能,这对于在网络状况不佳或者无网络环境下的用户体验提升至关重要。 YYCache是由著名iOS开发者...

    webView谷歌离线调试包

    调试基于WebView的App最舒服的工具Chrome自带的开发者工具,其中有我们熟悉的Dom树调试,JS调试,Network监视等等功能。 Google提供的调试Android上WebView的步骤: 1.开启手机上的USB调试功能并且连接计算机手机端...

    Android WebView cache 缓存 在线 视频播放

    5. 设置缓存路径:默认情况下,WebView会自动管理缓存。但如果你想自定义缓存位置,可以通过setDatabasePath()和setAppCachePath()方法设置。 ```java File cacheDir = getCacheDir(); // 获取应用的缓存目录 ...

    Android通过Chrome Inspect调试WebView的H5 App离线.rar

    2.本包主要为了解决调试webview(类似Chrome://inspect的功能)国内404或空白页面的问题。 3.本包内自带Chrome浏览器、离线调试包,用法解压包后文档中会有详细说明亲测保证可用,离线webview调试工具,开发H5混合应用...

    Html离线缓存webview配置详细

    下面我们将基于给定的代码示例,详细介绍如何在Android项目中配置WebView以实现离线缓存功能: 1. **启用DOM存储** DOM存储是用于存储HTML5应用数据的一种方式。通过`setDomStorageEnabled(true)`开启该功能,...

    moudle_webviewplus:WebView 离线缓存策略SDK

    `moudle_webviewplus` SDK通过增强WebView的离线缓存功能,极大地提升了Android应用在无网或弱网条件下的用户体验。通过合理的缓存策略和Java接口的灵活使用,开发者可以构建出更加健壮和用户友好的移动应用。

    Android-webview缓存

    总结,Android的Webview缓存机制是提高用户体验的关键,正确配置和管理缓存可以显著减少网络请求,加快页面加载速度。通过上述知识点,开发者可以根据具体需求定制Webview的缓存行为,为用户提供更加流畅的浏览体验...

    Android离线webview调试工具,开发H5混合应用必备

    然而,对于H5页面的调试工作,开发者通常依赖于Chrome浏览器的开发者工具(Chrome DevTools),其中的`chrome://inspect`功能可以远程调试连接到同一网络的设备上的WebView。但在中国,由于网络限制,`chrome://...

    WebView实现网络视频的播放和离线观看

    本文将深入探讨如何使用WebView实现网络视频的播放,并进一步介绍如何添加离线观看的功能,以便用户在没有网络连接的情况下也能观看已下载的视频。 首先,让我们了解一下WebView的基本用法。WebView是Android SDK中...

    ios WebView 页面缓存

    这里的缓存策略包括忽略缓存、优先使用缓存、在缓存失效时加载等。 三、自定义缓存策略 有时系统默认的缓存策略可能无法满足特定需求,此时可以自定义缓存策略。例如,创建自己的URLProtocol子类,拦截并处理HTTP...

    Android WebView 实现缓存网页数据

    在离线模式下,可以通过设置 `WebView` 的缓存模式为 `LOAD_CACHE_ONLY`,使其只从本地缓存加载网页: ```java webSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY); ``` 这样,即使没有网络,`WebView` 也能...

    WebView的缓存方案:H5缓存机制 + 资源预加载 + 资源拦截.zip

    风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据...

    Android WebView加载网页以及本地图片缓存问题

    总结,Android的WebView组件提供了丰富的功能,能够加载远程和本地资源,同时支持缓存机制,提高用户体验。开发者需要根据实际需求调整其配置和行为,以实现最佳的加载效果和性能。在处理图片资源时,特别要注意路径...

    Android实现WebView图片缓存,替换加载前默认图片的样式

    2. 设置Disk Cache路径:默认情况下,WebView的磁盘缓存存储在应用的私有目录下。但为了更灵活的控制,可以通过`setDatabasePath`来指定自定义的缓存路径。 ```java File cacheDir = new File(context.getCacheDir...

    UIWebView离线缓存

    UIWebView不仅能够实时加载网络页面,还可以实现离线缓存功能,使得用户在没有网络连接时依然可以查看之前加载过的网页内容。这个特性对于提高用户体验,特别是对于那些在网络不稳定或者无网络环境下的应用来说,...

    Android WebView 缓存详解

    Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地...

    webview的使用,优化,缓存

    Webview的使用需要结合具体需求进行配置和优化,合理管理缓存,保障安全和性能。同时,了解并掌握Webview的API和最佳实践,对于提升用户体验和应用质量至关重要。不断学习和探索,才能更好地利用Webview这一强大的...

    iOS WKWebView离线缓存

    功能包括: WKWebView的使用、JS和OC的交互、网页内容加载进度条的实现、WKWebView+UITableView混排 、 WKWebView离线缓存等。GitHub:https://github.com/wsl2ls/iOS_TipsiOS_Tips集合简介:1、暗黑模式2、AppleID...

    android webview在chrome离线调试工具devtools.txt

    由于chrome调试android webview出现空白页,或者404错误,因为没有,该工具用于调试android webview

    Android的webview支持HTML5的离线应用功能详细配置

    在Android开发中,Webview是一个强大的组件,它允许开发者在应用程序...当网络断开时,Webview将从本地缓存中加载这些资源,从而实现离线应用的功能。这种功能对于提升用户体验,特别是在移动设备上,是非常有价值的。

Global site tag (gtag.js) - Google Analytics