您的位置:首页 > 移动开发 > Android开发

[置顶] Android实现界面内容缓存

2016-06-01 12:24 435 查看
关于缓存的话题,想必大家都耳熟能详了。对于缓存,每个人也都会有各自的见解。缓存的原理大同小异,今天就和大家唠唠在Android中如何将界面中的内容进行缓存。

本篇博客将围绕如何使用SQLite数据库对数据进行缓存。

关于缓存机制的流程不多说了,大家也都清楚,我将流程以伪代码的方式直接贴出:

if(有网络) {

if(有缓存 && 缓存时间没有过期) {

getCacheContent--->取出缓存的内容

showContent();---->显示缓存的内容:例如List显示到ListView

} else {

presenter.loadData();--->请求服务器拉取数据

}

} else {

//没有网络的情况下

if(有缓存) {

getCacheContent--->取出缓存的内容

showContent();---->显示缓存的内容:例如List显示到ListView

} else {

showNetErrorView();--->显示无网络界面

}

}

上面就是缓存的伪代码。相信大家都能看懂。其实原理很简单,就是根据有无网络的情况来处理:

1.有网络:

(1)有缓存,并且缓存没有过期取缓存的数据。

(2)没有缓存或者缓存过期了,直接请求服务器拉取新数据。

2.无网络:

(1)有缓存。

(2)显示网络错误提示界面。

缓存的基本流程说完了,接下来我们来看下在实际开发中如何去处理。

1.创建SQLite数据库。我们来看核心代码

/**
* Created by Song on 2016/3/27.
*/
public class SQLiteDataHelper extends SQLiteOpenHelper{

private static SQLiteDataHelper instance;
public static SQLiteDataHelper getInstance(Context context) {
if(instance == null) {
synchronized (SQLiteDataHelper.class) {
if(instance == null) {
instance = new SQLiteDataHelper(context);
}
}
}

return instance;
}

创建SQLiteOpenHelper并实现单例模式。

2.创建表

一般我们缓存大致分为以下几个字段:缓存时间,缓存内容,缓存的内容标示,缓存标示我们一般用请求的URL作为唯一内容标示。

public static final String CREATE_CACHE_TABLE_SQL =
"CREATE TABLE " + TABLE_CACHE_NAME + "(" +
CACHE_ID +" integer primary key autoincrement," +
CACHE_URL +" TEXT,"+
CACHE_TIME +" TEXT," +
CACHE_CONTENT +" TEXT)";

3.根据我们上面定义的流程,我们需要4个方法:

(1)是否缓存

(2)缓存数据

(3)获取缓存数据

(4)缓存是否过期

4.分别实现上面的4个方法:

(1)是否缓存:

判断是否缓存,我们只需要根据URL去数据库查询是否有该项的内容存在,如果cursor的count == 0,即表明数据库还没有缓存该URL所对应的内容。

(2)缓存数据

缓存数据的时候,要分两种情况:

1>该URL所对应的内容已经缓存过,那么我们需要去更新已经缓存的内容,即执行UPDATE操作。

2>第一次缓存,那么我们直接执行INSERT,将数据添加到数据库即可。

(3)获取缓存数据

获取缓存数据,我们只需要根据URL去查询对应的缓存内容即可。即执行SELECT操作。

(4)缓存是否过期

在缓存数据的时候,我们会保存缓存时的时间。判断缓存是否过期,我们只需要取出缓存的时间与当前时间相比较,如果间隔了某一个时间(例如一小时),那么我们就让其作为过期数据。

OK,到这里,基本的缓存流程已经全部完毕了。大家现在是不是对缓存已经了如指掌了!下面,我们说几个需要注意的地方:

(1)操作Cursor完毕后,调用close()关闭,以免浪费内存资源。

(2)SQLiteOpenHelper创建的实例,需要一个Context。我们在传入时,尽量使用ApplicationContext。避免引起内存泄漏的问题。

好啦,关于Android实现缓存机制的内容就全部结束了,希望大家喜欢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: