在这篇博客里面我想要分享一下自己最近在项目里面遇到一个比较好的数据同步解决方案,首先让我们先来看看该方案的应用场景:我们在客户端本地利用数据库缓存了一些数据,当我们检测到数据库里面的数据发生变化的时候,我们希望程序能够实时自动的将这些变化的数据发送到服务器。

当你接到这个任务的时候,你会想到使用什么样的解决方案呢?首先需要实现自动化,那么我们应该首先想到的就是在后台默默的开启一个service,利用这个Service去发送变化的数据。但是这里面还有一个最关键的问题就是怎么检测数据库数据变化呢?这个时候,如果你接触过ContentObserver,就能够明白其实它就具有这种神奇的功能。下面让我们拆分开来看看,每个环节的代码实现。

首先,让我们来看看应该怎样去定义一个ContentObserver呢?

public class ContentObserverTest extends ContentObserver {

    public ContentObserverTest(Handler handler) {
super(handler);
} @Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}
}

在上面的代码里面我们可以看到onChange方法,在这个方法里面我们就可以执行变化的操作了。现在我们已经定义好了一个监听者,然后应该怎样将这个监听者与我们所要监听的对象绑定呢?

ContentObserverTest mObserver = new ContentObserverTest();
getContentResolver().registerContentObserver(Downloads.CONTENT_URI, true, mObserver);

通过上面的代码我们就相当于将这个监听者关联到地址为Downloads.CONTENT_URL的数据库对象上面,然后每当数据库发生insert/update操作的时候,我们都需要再调用:

getContext().getContentResolver().notifyChange(uri, null);

去通知监听者数据变化,进行同步操作就可以了。

android开发系列之ContentObserver的更多相关文章

  1. Android 开发系列教程之(一)Android基础知识

    什么是Android Android一词最早是出现在法国作家维里耶德利尔·亚当1986年发表的<未来夏娃>这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android,这就是And ...

  2. [Android开发系列]IT博客应用

    1.关于坑 好吧,在此之前先来说一下,之前开的坑,恩,确实是坑,前面开的两个android开发教程的坑,对不起,实在是没什么动力了,不过源码都有的,大家可以参照github这个应用 https://g ...

  3. Android开发系列之按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  4. Android开发系列之SQLite

    上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app ...

  5. Android开发系列之Android项目的目录结构

    今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目 ...

  6. Android开发系列之学习路线图

    通过前面的3篇博客已经简单的介绍了Android开发的过程并写了一个简单的demo,了解了Android开发的环境以及一些背景知识. 接下来这篇博客不打算继续学习Android开发的细节,先停一下,明 ...

  7. Android开发系列之搭建开发环境

    接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工 ...

  8. VS2015下的Android开发系列01——开发环境配置及注意事项

    概述 VS自2015把Xamarin集成进去后搞Android开发就爽了,不过这安装VS2015完成的时候却是长了不知道多少.废话少说进正题,VS2015安装时注意把Android相关的组件勾选安装, ...

  9. Android开发系列----sdk下载 环境准备

    今天开始准备Android开发环境,FQ下载Android Studio,官网下载地址 https://developer.android.com/studio/install.html (突然发现我 ...

随机推荐

  1. mac 安装 homebrew 配置

    前言:刚开始转换系统可能安装各种软件继续中... 1. 打开 Mac 中的命令行工具(终端) 2. 在打开的命令行工具中输入如下语句: ruby -e "$(curl --insecure ...

  2. 【02】【转】Nodejs学习笔记(三)--- 事件模块

    目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.on ...

  3. python之装饰器【转】

    装饰器 先来看一个例子,一个函数f1接收另一个函数f2作为参数,并将该参数f2返回给f2: def deco(func): print("before myfunc() called.&qu ...

  4. P1143 飘飘乎居士的约会

    P1143 飘飘乎居士的约会 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景  一阵狂风吹过  只听“pong”的一声,飘飘乎居士降落了!!! 描述 又是美妙 ...

  5. windows 加入域

    点击computer,右击选system ,点 change setting,填写domain和computer-name 加入域,下次登陆加入,在域中会检查computer name

  6. t4 template multi file output

    1.Manager.ttinclude <#@ assembly name="System.Core"#> <#@ assembly name="Sys ...

  7. Google 最新的 Fuchsia OS【科技讯息摘要】

    转自:http://www.cnblogs.com/pied/p/5771782.html 就是看到篇报道,有点好奇,就去FQ挖了点东西回来. 我似乎已开始就抓到了重点,没错,就是 LK . LK 是 ...

  8. android init.rc命令快速对照表

    注1:另外还讲述了怎样输出log: Debugging notes---------------By default, programs executed by init will drop stdo ...

  9. C#原生加密方法: System.Security.Cryptography.CryptoStream DataSet加密解密

    采用16位密钥形式加密,把数据 dataset或文本转换为二进制流,然后进行加密解密.代码如下: using System; using System.Collections.Generic; usi ...

  10. flashcache 介绍

    rpm: flashcache-utils-0.0-4.1.el6.x86_64 kmod-flashcache-0.0-3.el6.x86_64 基本介绍: Flashcache是Facebook技 ...