Android实现界面内容缓存

Posted Songlcy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android实现界面内容缓存相关的知识,希望对你有一定的参考价值。

关于缓存的话题,想必大家都耳熟能详了。对于缓存,每个人也都会有各自的见解。缓存的原理大同小异,今天就和大家唠唠在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实现缓存机制的内容就全部结束了,希望大家喜欢!


以上是关于Android实现界面内容缓存的主要内容,如果未能解决你的问题,请参考以下文章

我的手机管家(14) 缓存处理 界面设计

使用LinkedHashMap实现一个简易的LRU缓存

android有没有能播放.swf的开源框架

Android企业级实战-界面篇-2

LRU算法的实现

android应用程序如何实现界面跳转?