Android 缓存处理

Android缓存:

采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览。下边我简略列举一下缓存管理的适用环境:

1. 提供网络服务的应用

2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓存机制。

3. 缓存的过期时间是可以接受的(类似网易的新闻阅读,支持离线离线阅读)

这样所带来的好处:

1. 减小服务器的压力

2. 提高客户端的响应速度(本地数据提取嘛)

3. 一定程度上支持离线浏览(可以参考网易的那个新闻应用,个人感觉离线阅读做得非常棒。)

一、缓存管理的方法

缓存管理的原理很简:通过时间的设置来判断是否读取缓存还是重新下载;断网下就没什么好说的,直接去缓存即可。如图:

里面会有一些细节的处理,后面会详细阐述。基于这个原理,目前个人用过的两种比较常见的缓存管理方法是:数据库和文件(txt)。

二、数据库(SQLite)缓存方式

这种方法是在下载完数据文件后,把文件的相关信息如url,路经,下载时间,过期时间等存放到数据库,当然我个人建议把url作为唯一的标识。下次下载的时候根据url先从数据库中查询,如果查询到当前时间并未过期,就根据路径读取本地文件,从而实现缓存的效果。

从实现上我们可以看到这种方法可以灵活存放文件的属性,进而提供了很大的扩展性,可以为其它的功能提供一定的支持。

从操作上需要创建数据库,每次查询数据库,如果过期还需要更新数据库,清理缓存的时候还需要删除数据库数据,稍显麻烦,而数据库操作不当又容易出现一系列的性能,ANR问题,指针错误问题,实现的时候要谨慎,具体作的话,但也只是增加一个工具类或方法的事情。

还有一个问题,缓存的数据库是存放在/data/data/<package>/databases/目录下,是占用内存空间的,如果缓存累计,容易浪费内存,需要及时清理缓存。

当然这种方法从目前一些应用的实用上看,我没有发现什么问题,估计使用的量还比较少吧。

三、文件缓存方式

这种方法,使用File.lastModified()方法得到文件的最后修改时间,与当前时间判断是否过期,从而实现缓存效果。

实现上只能使用这一个属性,没有为其它的功能提供技术支持的可能。操作上倒是简单,比较时间即可,而且取的数据也就是文件里的JSON数据而已。本身处理也不容易带来其它问题,代价低廉。

四、文件法缓存方式的两点说明

1. 不同类型的文件的缓存时间不一样。

笼统的说,不变文件的缓存时间是永久,变化文件的缓存时间是最大忍受不变时间。说白点,图片文件内容是不变的,一般存在SD卡上直到被清理,我们是可以永远读取缓存的。配置文件内容是可能更新的,需要设置一个可接受的缓存时间。

2. 不同环境下的缓存时间标准不一样。

无网络环境下,我们只能读取缓存文件,为了应用有东西显示,没有什么过期之说了。

WiFi网络环境下,缓存时间可以设置短一点,一是网速较快,而是流量不要钱。

3G流量环境下,缓存时间可以设置长一点,节省流量,就是节省金钱,而且用户体验也更好。

GPS就别说更新什么的,已经够慢的了。缓存时间能多长就多长把。

当然,作为一款好的应用,不会死定一种情况,针对于不同网络变换不同形式的缓存功能是必须有的。而且这个时间根据自己的实际情况来设置:数据的更新频率,数据的重要性等。

本文参考网址(http://blog.csdn.net/zhuanshenweiliu/article/details/31744673)。

Android清除本地数据缓存代码:http://www.cnblogs.com/rayray/p/3413673.html

时间: 2024-10-13 03:11:56

Android 缓存处理的相关文章

Android Studio编译运行Fresco Sample。Android缓存新境界。 (a problem occurred start process &#39;command &#39;ndk-build&#39;&#39;)

今天闲逛知乎,偶遇一篇“Android应用开发难点”,作为安卓程序猿,本能点进去,想看看究竟能有什么难点自己不知道的(夜郎自大..面壁中). 插件化,H5容器优化,网络.图片缓存..感觉都还好.直到看到“Fresco出来之前,你是不是觉得图片缓存已经到头了?” Fresco究竟是何方神圣!! 询问度娘得知,2015.3.27日之前就已经发布了(度娘的结果最早是3.27).通过查看GitHub: Version 0.1.0  tyronen released this 16 days ago · 

android 缓存路径

用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的.大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中.这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据.如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢? 通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据通过Conte

Android缓存机制&amp;一个缓存框架推荐

1.先推荐一个轻量级缓存框架--ACache(ASimpleCache) ACache介绍: ACache类似于SharedPreferences,但是比SharedPreferences功能更加强大,SharedPreferences只能保存一些基本数据类型.Serializable.Bundle等数据, 而Acache可以缓存如下数据: 普通的字符串.JsonObject.JsonArray.Bitmap.Drawable.序列化的java对象,和 byte数据. 主要特色: 1:轻,轻到只

[小记]Android缓存问题

今天晚上,产品经理打电话说我们的Android App除了问题,问题很简单就是一个缓存问题,由于这个程序是前同事写的,我也只能呵呵一笑,有些事你就得扛.还是回到正题吧,这个缓存问题,实在有点奇葩,所以我才要记录下,希望避免 问题 看了代码,感觉上没问题,不过针对用户出现的问题,还是觉得这个逻辑就是错误的: 1 有文件缓存就不在请求网络 由于请求的那个接口返回的数据较大,做了一个文件缓存放到本地,这个没错,可是缓存完后,当下次在请求,居然先判断缓存文件是否存在,若存在就不在读取网络数据,而是直接用

Android 缓存

1.Android缓存机制&一个缓存框架推荐 http://blog.csdn.net/shakespeare001/article/details/51695358 2.ASimpleCache https://github.com/yangfuhai/ASimpleCache 3.Android DiskLruCache 源码解析 硬盘缓存的绝佳方案 4.Android DiskLruCache完全解析,硬盘缓存的最佳方案 5.DiskLruCache https://github.com/

由Android缓存设计想到的

由Android缓存设计想到的 前言 Android这种对内存比较敏感的系统,在处理大量图片的时候不可避免要用到缓存,那么到底是应该使用虚拟机底层通过GC回收保障的SoftReference,还是使用一个带LRU算法的队列,哪个更适合Android系统下的应用? 基本概念 缓存,顾名思义把已经读取到的数据存下来,供再次读取,合理的使用缓存可以减少一些昂贵代价的动作(数据库操作,文件读写,网络传输,等),缓解系统压力,提高程序响应速度. 设计缓存需要注意的几个方面:缓存的容量,如何使缓存维持在一个

android缓存详解

Android缓存: 采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓存机制. 3. 缓存的过期时间是可以接受的(类似网易的新闻阅读,支持离线离线阅读) 这样所带来的好处: 1. 减小服务器的压力 2. 提高客户端的响应速度(本地数据提取嘛) 3. 一定程度上支持离线浏览(可以参考网易的那个新闻应用,个人感觉离线阅读做得非常棒.) 一.缓存管理的

【转】彻底解析Android缓存机制——LruCache

彻底解析Android缓存机制——LruCache 关于Android的三级缓存,其中主要的就是内存缓存和硬盘缓存.这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻底理解Android中的缓存机制. 一.Android中的缓存策略 一般来说,缓存策略主要包含缓存的添加.获取和删除这三类操作.如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的.当缓存满了之后,再想其添加缓存,这个时候就需要删除

Android缓存处理--&gt;

采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览. 缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓存机制. 3. 缓存的过期时间是可以接受的(类似网易的新闻阅读,支持离线离线阅读) 这样所带来的好处: 1. 减小服务器的压力 2. 提高客户端的响应速度(本地数据提取嘛) 3. 一定程度上支持离线浏览(可以参考网易的那个新闻应用,个人感觉离线阅读做得非常棒.) 缓存管理的原理:通过时间的设置来判断是否读取缓存还是