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实现缓存机制的内容就全部结束了,希望大家喜欢!

时间: 2024-11-13 03:49:23

Android实现界面内容缓存的相关文章

Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

Android公共库--图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工具类(网络.下载.shell.文件.json等等). TrineaAndroidCommon已开源,地

Android流行界面结构——Fragment通过ViewPager(带指示器)嵌套Fragment结构的创建方法详解

原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6287213.html 当前Android流行界面结构的一种--Fragment通过ViewPager嵌套Fragment结构目前非常常用,在本篇文章中, 我们一步一步将其创建出来,非常详细的让大家看到这个界面是如何实现的,下面我们开始吧. 首先我们看一下最终的效果动画,以便大家有个最初的印象. 本文章专注于功能的实现,并没有着重于界面的美观,所以大家看到的效果一般,UI效果需要大家进一步修改.

Android典型界面设计-访网易新闻实现双导航tab切换

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

【转】android 欢迎界面翻页成效,仿微信第一次登陆介绍翻页界面

android 欢迎界面翻页效果,仿微信第一次登陆介绍翻页界面 本实例做的相对比较简单主要是对翻页控件的使用,有时候想要做一些功能是主要是先了解下是否有现成的控件可以使用,做起来比较简单不用费太大的劲去找别的资料,或者别的办法设计.有空多读读android API了解熟悉了做什么都比较容易.(注意:ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入“android-support-v4.jar” 如果sdk是4.0及以上的

Android典型界面设计(7) ——DrawerLayout+Fragement+ViewPager+PagerTabStrip实现双导航

一.问题描述 在Android典型界面设计(3)的我们实现了双导航效果,即外层底部导航和内部区域的头部导航,如网易新闻等很多应用采用了这种导航,但Google提供DrawerLayout可实现抽屉式导航,建议使用DrawerLayout代替底部导航,下面我们就使用官方提供的DrawerLayout+Fragement+ViewPager+PagerTabStrip实现下图效果: 二.本例相关技术 1. DrawerLayout 抽屉式导航 2. Fragment管理 3. ViewPager和P

Android培训Android课堂重点内容汇总

Android培训Android课堂重点内容汇总 一.Android Introduction Android 是一个允许你在java环境下为手机设备开发应用和游戏的提供丰富应用框架. 二.四大组件 1.Activity (1)定义:提供给用户一个与app进行交互的UI界面的组件 (2)创建 //步骤 (1 继承Activity或者其子类 (2 必须实现OnCreate() (3 OnCreate()实现SetContentView(),为这个Activity提供的窗口,添加layout(布局)

Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航

一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见ActionBar还是比较强大的,关键要深入进去.灵活的运用,下面我们就使用ActionBar实现如图所示的效果: 二.本例特点 1.  兼容低版本 2. 使用ActionBar 分体设计(split) 3. Tab使用自定义View 4. 结合ViewPager实现滑动导航 三.代码讲解: 1.在项目中加入

Android典型界面设计(3)——访网易新闻实现双导航tab切换

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏

一.问题描述 侧边栏是Android应用中十分常见的界面效果,可随主屏在左侧或右侧联动,是特别适应手机等小屏幕特性的典型界面设计方案之一,常用作应用的操作菜单,如图所示 实现侧边栏可以使用第三方组件slidingmenu实现和Google官方提供的滑动抽屉组件DrawerLayout实现,下面就分别使用这两种方法实现左右滑动的侧边栏 二.先使用之前讲过的ActionBar制作标题栏 这里只贴出代码,相关知识请查阅 <Android典型界面设计(4)--使用ActionBar+Fragment实现