平时我们开发一个Android客户端的时候,谈到缓存处理更多的是关于图片的缓存,其实我们在开发类似于新闻客户端的时候,还需要考虑数据的缓存处理。通过数据的缓存处理,我们可以减少服务端的压力,减少用户的流量消耗。
实现的方式主要是将客户端调用接口获取的列表数据缓存到相应目录下,以文件的形式保存下来,当下次进入界面,首先去缓存目录下找缓存文件,如果没有缓存文件,则直接调用网络接口去服务端获取;如果有缓存文件,还需要判断缓存文件的有效期,如果过了有效期,还是需要调用网络接口去获取最新的数据,拿到最新数据显示在界面并替换当前的缓存文件;如果没有过有效期,则直接拿出缓存文件的数据显示。
下面是缓存数据处理的几个函数:
//保存数据至缓存文件 public boolean saveObject(Serializable ser, String file) { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = sContext.openFileOutput(file, Context.MODE_PRIVATE); oos = new ObjectOutputStream(fos); oos.writeObject(ser); oos.flush(); return true; } catch (Exception e) { // e.printStackTrace(); return false; } finally { try { oos.close(); } catch (Exception e) { } try { fos.close(); } catch (Exception e) { } } } //判断指定缓存文件是否存在 public boolean isExistDataCache(String cachefile) { boolean exist = false; File data = sContext.getFileStreamPath(cachefile); if (data.exists()) exist = true; return exist; } private boolean isReadDataCache(String cachefile) { return readObject(cachefile) != null; } //判断缓存文件是否过了有效期 public boolean isCacheDataFailure(String cachefile, int time) { boolean failure = false; if (!isReadDataCache(cachefile)) { failure = true; } else { File data = sContext.getFileStreamPath(cachefile); if (data.exists() && ((System.currentTimeMillis() - data.lastModified()) > time || (System .currentTimeMillis() - data.lastModified()) < 0)) failure = true; else if (!data.exists()) failure = true; } return failure; } //读取指定缓存文件 public Serializable readObject(String file) { if (!isExistDataCache(file)) return null; FileInputStream fis = null; ObjectInputStream ois = null; try { fis = sContext.openFileInput(file); ois = new ObjectInputStream(fis); return (Serializable) ois.readObject(); } catch (FileNotFoundException e) { return null; } catch (Exception e) { // e.printStackTrace(); if (e instanceof InvalidClassException) { File data = sContext.getFileStreamPath(file); data.delete(); } return null; } finally { try { ois.close(); } catch (Exception e) { } try { fis.close(); } catch (Exception e) { } } } //清除指定缓存文件 public boolean clearFileCache(String filecache) { boolean ret = false; if (isExistDataCache(filecache)) { File file = sContext.getFileStreamPath(filecache); file.delete(); ret = true; } return ret; }
通过上面的代码可以发现,数据是缓存在你应用目录的files文件下,也就是data/data/packageName/files/
使用方式:
1、读取缓存,并判断根据缓存来判断是否需要调用网络接口
//读取缓存文件 Serializable object = AppState.getInstance().readObject(SystemConfig.KEY_HISTORY); if (object == null) {//不存在缓存文件 if (AppState.getInstance().isNetworkConnected()) { //网络状态好的情况下直接调用接口获取数据 startHistory(); } else { showFailLayout(); } } else { if (AppState.getInstance().isCacheDataFailure(SystemConfig.KEY_HISTORY, SystemConfig.CACHE_TIME)) {//缓存文件过了有效期(20分钟) if (AppState.getInstance().isNetworkConnected()) { startHistory(); } else { showFailLayout(); } } else { //获取缓存数据并显示 mList = (ArrayList<TodayHistory>) object; mHandler.sendEmptyMessage(1); } }
2、调用网络接口获取数据之后,显示并保存到缓存文件中
if (mList.size() > 0) AppState.getInstance().saveObject(mList, SystemConfig.KEY_HISTORY); mHandler.sendEmptyMessage(1);
注意:保存到缓存文件的数据类型必须实现Serializable接口,因为读取和保存数据都是通过IO操作的。
欢迎去下载我的软件体验:http://android.myapp.com/myapp/detail.htm?apkName=com.yln.history
相关推荐
"android数据缓存"主要涉及如何有效地管理和存储各种类型的数据,如字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的Java对象以及byte数据。下面将详细介绍这些知识点。 1. **数据缓存的优势** - 提升...
本文将深入探讨Android数据缓存工具类的设计与实现,特别是针对JSON数据和字符串的缓存,并且会涉及过期时间管理,以确保数据的新鲜度。 首先,我们要理解数据缓存的基本原理。数据缓存是一种在本地存储常用数据的...
在Android开发中,数据缓存是一项重要的技术,它能够提高应用性能,减少网络请求,提升用户体验。ASimpleCache是Google的GmsCore项目中提取出来的一个轻量级、易用的本地缓存库,适用于存储小量的数据,如JSON字符串...
6. **处理SQLite数据库缓存**:如果应用使用了SQLite数据库,还需要考虑清理数据库中的过期数据。可以执行特定的SQL语句来清除不再需要的表或记录。 现在,让我们来看如何封装一个缓存清理工具类。首先,创建一个名...
在Android开发中,数据缓存是一项重要的技术,它能够提高应用程序的性能和用户体验。当用户访问数据时,如果数据已经被缓存,系统可以...通过理解和实践CacheTestDemo,开发者可以更好地掌握Android数据缓存的运用。
在Android开发中,HTTP缓存是一种重要的技术,它允许应用程序在本地存储网络请求的数据,以便在没有网络连接或网络连接不稳定时仍能访问这些数据,从而实现离线应用的功能。HTTP缓存主要遵循HTTP协议中的缓存控制...
### Android 图片缓存处理详解 #### 概述 在Android开发中,图片缓存是一项重要的技术,尤其是在处理网络图片加载、浏览应用等场景时。合理的图片缓存机制不仅可以提高应用性能,减少流量消耗,还能提升用户体验。...
在Android开发中,缓存处理是一项至关重要的技术,它能够提高应用性能,减少网络请求,提升用户体验。本文将深入探讨Android缓存处理的关键知识点,并结合提供的"ImageAsynLoader"这个示例,来阐述如何有效地实现...
在Android应用开发中,我们经常需要缓存数据以提高应用性能和用户体验。Application类作为所有Activity的顶级容器,常被...通过合理利用Android提供的缓存框架和第三方库,可以更好地实现数据缓存,提高应用性能。
6. **其他缓存框架**:除了自定义实现,还有一些开源的缓存框架可供选择,如Android官方推荐的Android Architecture Components库中的Room Persistence Library,它可以结合SQLite实现高效的数据缓存。此外,...
异步意味着数据的加载和处理不会阻塞主线程,使得应用保持流畅响应,而缓存则允许我们将常用数据存储在本地,以便快速访问,减少网络延迟。 **一、异步处理** 异步处理在Android中主要通过以下几种方式实现: 1. ...
在Android开发中,为了优化用户体验,提高应用性能,通常会采用文件缓存和内存缓存技术,特别是处理像ListView这样的滚动列表组件加载网络图片时。本文将深入探讨这两种缓存机制,以及如何解决图片错位问题。 首先...
在Android应用开发中,图片加载和缓存是一个关键性能...以上就是关于"Android图片缓存算法的代码例子"的主要知识点,通过这些技术,我们可以有效地处理Android应用中的图片加载和缓存问题,提升应用的性能和用户体验。
Android缓存的简单实现通常涉及选择合适的缓存策略和管理机制,结合内存和磁盘缓存,确保数据的高效读写。通过分析提供的资源文件,开发者可以更好地理解和学习这一过程,从而在自己的项目中实现高效的缓存管理。
- `Android Room Persistence Library`: 提供了数据库功能,也支持本地数据缓存。 **AsimpleCacheDemo** `AsimpleCacheDemo`可能是一个简单的缓存示例项目,它可能包含以下内容: 1. **String缓存**: 存储和检索...
本文将深入探讨Android中的文件缓存技术,尤其是如何利用文件来存储和读取字符串数据。文件缓存是一种常见的本地缓存策略,它通过将数据持久化到设备的文件系统中,实现数据的快速访问。 首先,我们需要了解Android...
"Android 图片缓存处理,及异步加载类"这个主题主要涵盖了两个关键知识点:图片缓存和异步加载。 首先,让我们深入了解一下图片缓存。在Android应用中,频繁地加载网络图片会导致用户体验下降,因为这会消耗大量的...
在Android开发中,图片缓存是一项重要的技术,用于优化应用性能和减少网络资源的消耗。在用户滚动列表或浏览大量图片时,如果没有合适的缓存机制,可能会导致内存溢出(OOM)或者用户体验下降,因为频繁的网络请求会...
在Android应用开发中,清理缓存是一项非常重要的功能,它有助于释放存储空间,提升用户体验,避免因缓存过多导致的应用卡顿或运行异常。本文将深入解析`Android清理缓存功能实现`的源码,主要关注如何有效地清除应用...
在Android中实现异步请求图片并加入三级缓存,通常涉及到内存缓存、文件缓存和网络数据三层。内存缓存(一级缓存)用于快速访问,通常使用LRU(Least Recently Used)算法来管理,当内存不足时,最近最少使用的图片...