在做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
分享到:
相关推荐
基于YYCache和系统的NSURLProtocol实现WebView离线缓存功能
调试基于WebView的App最舒服的工具Chrome自带的开发者工具,其中有我们熟悉的Dom树调试,JS调试,Network监视等等功能。 Google提供的调试Android上WebView的步骤: 1.开启手机上的USB调试功能并且连接计算机手机端...
2.本包主要为了解决调试webview(类似Chrome://inspect的功能)国内404或空白页面的问题。 3.本包内自带Chrome浏览器、离线调试包,用法解压包后文档中会有详细说明亲测保证可用,离线webview调试工具,开发H5混合应用...
WebView 离线缓存策略SDK
WebView cache 缓存 在线 视频播放 离线阅读
调试webview(类似Chrome://inspect的功能)国内404,大家都懂的,经过我各种折腾制作完成,不会出现空白页面,无需科学那啥,不限机型,Hybrid App等H5混合应用开发必备,
Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地...
WebView加载网页,有网的情况下加载网页,之后关闭网络并结束进程在打开一样可以看到先前看到过的网页,当点击没打开过的网页是则:链接不存在。
由于chrome调试android webview出现空白页,或者404错误,因为没有,该工具用于调试android webview
适用于Android项目中webview的缓存,可以指定缓存目录,缓存时间,有问题请加,谢谢
自己项目遇到的问题,把他总结下来,遇到同样问题可以下载
功能包括: WKWebView的使用、JS和OC的交互、网页内容加载进度条的实现、WKWebView+UITableView混排 、 WKWebView离线缓存等。GitHub:https://github.com/wsl2ls/iOS_TipsiOS_Tips集合简介:1、暗黑模式2、AppleID...
实现Android中WebView图片的缓存,并且实现如何替换WebView中默认图片以及如何实现图片的点击。
图片列表RecyclerView+ListView+WebView+JzvdStd/JZPlayer+Jsoup+Glide
安卓调试调试webview(类似Chrome://inspect的功能)国内404,大家都懂的,经过我各种折腾制作完成,不会出现空白页面,无需科学那啥,不限机型,Hybrid App等H5混合应用开发必备
风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据...
Android webview 加载网页以及本地资源以及SD资源demo,以及加载缓存资源
近来工作中也要用到HTML5离线应用功能,由于是在Android平台上做,所以自然而然的选择Webview来解析网页。但如何使Webivew支持HTML5离线应用功能呢,经过反复摸索和上网查找资料,反复做试验终于成功了。首先需配置...
Android WebView 图片缓存
html的连接可以点击进入QQ或者微信程序,界面的电话号码QQ号码都是从服务器获取,获取的数据直接保存在应用的私有目录下,然后从该目录取出数据通过java类调用js填充到html上,html根据绑定的java对象调用java类的...