从 http://androiddada.iteye.com/blog/1280946 来的
在做Webview显示服务器的html功能时 需要加入离线功能。
开始思路很狭隘,以为一定应该是从服务器得到的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
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");
相关推荐
4. 配置缓存:为了实现离线阅读,我们需要启用WebView的缓存功能。WebSettings提供了setCacheMode()方法来设置缓存模式,比如LOAD_CACHE_ONLY,这样在无网络时,WebView会优先从本地缓存加载内容。 ```java ...
本文将深入探讨如何在Android的Webview中实现缓存功能,包括指定缓存目录、设置缓存时间等关键知识点。 一、Webview缓存概述 Webview的缓存机制主要包括两种类型:内存缓存(Memory Cache)和磁盘缓存(Disk Cache...
总结,Android的WebView组件提供了丰富的功能,能够加载远程和本地资源,同时支持缓存机制,提高用户体验。开发者需要根据实际需求调整其配置和行为,以实现最佳的加载效果和性能。在处理图片资源时,特别要注意路径...
Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地...
通过以上步骤,我们就成功地实现了在Android的WebView中进行图片缓存、替换加载前的默认图片样式以及图片点击事件的处理。这不仅提升了用户体验,还能有效地减少网络资源的消耗。同时,这些技术也可以作为基础,...
要开启 `WebView` 的缓存功能,首先需要在AndroidManifest.xml文件中的 `<application>` 标签下添加以下权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:...
下面我们将基于给定的代码示例,详细介绍如何在Android项目中配置WebView以实现离线缓存功能: 1. **启用DOM存储** DOM存储是用于存储HTML5应用数据的一种方式。通过`setDomStorageEnabled(true)`开启该功能,...
在Android开发中,Webview是一个强大的组件,它允许开发者在应用程序...当网络断开时,Webview将从本地缓存中加载这些资源,从而实现离线应用的功能。这种功能对于提升用户体验,特别是在移动设备上,是非常有价值的。
本文将详细介绍如何在Android中实现WebView缓存的删除。 首先,我们来看一个删除WebView缓存的实例方法`clearCacheFolder()`: ```java // 清除在numDays之前的所有缓存 private int clearCacheFolder(File dir, ...
- 使用缓存:`WebView`支持离线缓存,通过设置`WebSettings`的缓存策略,可以提高加载速度。 ```java settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ``` - 清理资源:在不再使用`WebView`时,...
以上就是Android中使用WebView的基本操作,通过这些基础,你可以根据需求进行更复杂的定制,例如实现离线缓存、注入JavaScript对象、处理网页中的图片和视频等。在实际开发中,WebView经常被用来构建混合应用,结合...
- 使用`WebView缓存策略`,如设置为`LOAD_CACHE_ELSE_NETWORK`,可以在离线状态下显示之前加载过的网页。 - 开启硬件加速以提高WebView性能,调用`WebView#setLayerType(View.LAYER_TYPE_HARDWARE, null)`。 8. *...
此外,为了优化用户体验,我们可能需要实现缓存功能,让`WebView`在离线状态下也能显示之前加载过的页面。可以通过以下方式进行配置: ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_...
本文将深入探讨如何构建一个通用的WebView,包括自定义错误页面、缓存数据以及支持离线浏览的功能。 一、自定义错误页面 在使用WebView加载网页时,可能会遇到网络错误、404找不到页面等问题。默认情况下,WebView...
同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大结合,创建出丰富的混合应用。本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的...
这里的缓存策略包括忽略缓存、优先使用缓存、在缓存失效时加载等。 三、自定义缓存策略 有时系统默认的缓存策略可能无法满足特定需求,此时可以自定义缓存策略。例如,创建自己的URLProtocol子类,拦截并处理HTTP...
本文将深入探讨Webview的使用、优化以及缓存管理,帮助开发者提高应用性能并优化用户体验。 一、Webview的使用 1. 初始化:在Android中,我们通常通过`WebView`类创建Webview实例,并设置一些基本属性,如是否启用...
在Android开发中,Webview是一个强大的组件,常用于加载网页内容和实现轻量级的浏览器功能。当需要在应用中查看PDF文档时,Webview也是一个常见的选择,特别是对于在线PDF资源。本文将深入探讨如何利用Webview查看...