`

android > Webview离线功能(优先cache缓存+cache缓存管理)

 
阅读更多

 

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

 

在做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");  

 

 

分享到:
评论

相关推荐

    Android WebView cache 缓存 在线 视频播放

    4. 配置缓存:为了实现离线阅读,我们需要启用WebView的缓存功能。WebSettings提供了setCacheMode()方法来设置缓存模式,比如LOAD_CACHE_ONLY,这样在无网络时,WebView会优先从本地缓存加载内容。 ```java ...

    Android-webview缓存

    本文将深入探讨如何在Android的Webview中实现缓存功能,包括指定缓存目录、设置缓存时间等关键知识点。 一、Webview缓存概述 Webview的缓存机制主要包括两种类型:内存缓存(Memory Cache)和磁盘缓存(Disk Cache...

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

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

    Android WebView 缓存详解

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

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

    通过以上步骤,我们就成功地实现了在Android的WebView中进行图片缓存、替换加载前的默认图片样式以及图片点击事件的处理。这不仅提升了用户体验,还能有效地减少网络资源的消耗。同时,这些技术也可以作为基础,...

    Android WebView 实现缓存网页数据

    要开启 `WebView` 的缓存功能,首先需要在AndroidManifest.xml文件中的 `&lt;application&gt;` 标签下添加以下权限: ```xml &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-permission android:...

    Html离线缓存webview配置详细

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

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

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

    Android实现WebView删除缓存的方法

    本文将详细介绍如何在Android中实现WebView缓存的删除。 首先,我们来看一个删除WebView缓存的实例方法`clearCacheFolder()`: ```java // 清除在numDays之前的所有缓存 private int clearCacheFolder(File dir, ...

    Android之WebView使用Demo

    - 使用缓存:`WebView`支持离线缓存,通过设置`WebSettings`的缓存策略,可以提高加载速度。 ```java settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ``` - 清理资源:在不再使用`WebView`时,...

    android 简单webview的使用

    以上就是Android中使用WebView的基本操作,通过这些基础,你可以根据需求进行更复杂的定制,例如实现离线缓存、注入JavaScript对象、处理网页中的图片和视频等。在实际开发中,WebView经常被用来构建混合应用,结合...

    Android 通过 WebView 与js 简单交互实现图文混排与查看大图功能

    - 使用`WebView缓存策略`,如设置为`LOAD_CACHE_ELSE_NETWORK`,可以在离线状态下显示之前加载过的网页。 - 开启硬件加速以提高WebView性能,调用`WebView#setLayerType(View.LAYER_TYPE_HARDWARE, null)`。 8. *...

    Android通过webview控件实现webapp的demo androidstudio

    此外,为了优化用户体验,我们可能需要实现缓存功能,让`WebView`在离线状态下也能显示之前加载过的页面。可以通过以下方式进行配置: ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_...

    Android构建一个通用的WebView(二):自定义的错误页面、缓存数据,离线浏览

    本文将深入探讨如何构建一个通用的WebView,包括自定义错误页面、缓存数据以及支持离线浏览的功能。 一、自定义错误页面 在使用WebView加载网页时,可能会遇到网络错误、404找不到页面等问题。默认情况下,WebView...

    android使用webView实现java程序与js脚本的相互调用

    同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大结合,创建出丰富的混合应用。本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的...

    ios WebView 页面缓存

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

    webview的使用,优化,缓存

    本文将深入探讨Webview的使用、优化以及缓存管理,帮助开发者提高应用性能并优化用户体验。 一、Webview的使用 1. 初始化:在Android中,我们通常通过`WebView`类创建Webview实例,并设置一些基本属性,如是否启用...

    Android利用 webview 查看阅读pdf资料( 优化)

    在Android开发中,Webview是一个强大的组件,常用于加载网页内容和实现轻量级的浏览器功能。当需要在应用中查看PDF文档时,Webview也是一个常见的选择,特别是对于在线PDF资源。本文将深入探讨如何利用Webview查看...

Global site tag (gtag.js) - Google Analytics