`

Android里监视数据库的变化[转]

阅读更多

以launcher app为例说明,此功能的核心是ContentResolver 的notifyChangeregisterContentObserver 接口

Launcher.java的一个方法(在onCreate方法里调用),这里即是为要监视的对象注册Observer。我这里讨论如何监视数据库里数据的变化,所以要监视的对象自然是数据库了, LauncherSettings.Favorites.CONTENT_URI 指向的就是一张数据库表(详见launcher app源码)。
private void registerContentObservers() {
ContentResolver resolver = getContentResolver();
resolver.registerContentObserver(LauncherProvider.CONTENT_APPWIDGET_RESET_URI, true,
mWidgetObserver);
resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true,                   mObserver);
}

其中mObserver是个 FavoritesChangeObserver 类型的对象(只以它为例讲解),FavoritesChangeObserver类的定义如下:
private class FavoritesChangeObserver extends ContentObserver {
public FavoritesChangeObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
onFavoritesChanged();
}
}

onFavoritesChanged()方法是Observer定义的一部分,用于在接收到通知后进行相应的处理操作。这个方法里的内容不展开叙述,它的工作就是刷新Home界面。
private void onFavoritesChanged() {
mDesktopLocked = true;
mModel.loadUserItems(false, this, false, false);
}



LauncherProvider.java
这里是实际操作数据库的地方,操作完成之后会视情况通知前面注册的Observer。
private void sendNotify(Uri uri) {
String notify = uri.getQueryParameter(PARAMETER_NOTIFY);
if (notify == null || "true".equals(notify)) {
getContext().getContentResolver().
notifyChange(uri, null);
}

}


@Override
public Uri insert(Uri uri, ContentValues initialValues) {
SqlArguments args = new SqlArguments(uri);

SQLiteDatabase db = mOpenHelper.getWritableDatabase();
final long rowId = db.insert(args.table, null, initialValues);
if (rowId <= 0) return null;

uri = ContentUris.withAppendedId(uri, rowId);
sendNotify(uri);

return uri;
}

分享到:
评论

相关推荐

    Android 网络监视器源码

    - **NetworkCallback**:从Android 5.0(API 21)开始,可以通过注册`ConnectivityManager.NetworkCallback`监听网络连接变化。 5. **源码分析**: - **请求拦截与记录**:源码中会包含对网络请求的拦截逻辑,...

    sms.zip_Android 数据库_android_android sms_sms

    同时,可以利用`ContentObserver`监视短信数据库的变化。 8. **数据库优化**:对于大量短信数据,优化查询性能和存储效率至关重要。这可能涉及到索引的创建、数据分页加载以及合理设计数据库表结构。 9. **备份与...

    Android 网络监视器 源码

    本文将深入探讨“Android网络监视器”的源码,揭示其工作原理,并提供一些入门学习的指导。 1. **网络监控基础** 在Android系统中,网络监控主要涉及到对HTTP/HTTPS请求的跟踪。这些请求通常由`HttpURLConnection`...

    Android网络监视器源码.zip

    《深入解析Android网络监视器源码》 在Android开发中,理解网络监控是至关重要的,它可以帮助开发者优化网络性能,定位网络相关问题。本篇将详细介绍Android网络监视器的源码,带你一窥其内部机制。 一、Android...

    悬浮框监视内存变化

    标题中的“悬浮框监视内存变化”指的是在Android应用开发中,通过一个悬浮窗口来实时监控应用程序的内存使用情况。悬浮框通常是一个可自定义的小窗口,它可以浮动在其他应用之上,提供用户即时的信息或者功能。在这...

    Android 网络监视器源码.rar

    【Android网络监视器源码解析】 在Android应用开发中,理解和监控网络活动是至关重要的,因为这直接影响到应用的性能和用户体验。"Android网络监视器源码"提供了一个宝贵的资源,帮助开发者深入理解网络请求的流程...

    andbatdog监视电池Android源码.rar

    《深入解析Android源码:andbatdog电池监视模块》 在Android系统中,电池管理是一项至关重要的任务,它直接影响到用户的使用体验。本资源“andbatdog监视电池Android源码.rar”提供了一个名为“andbatdog”的电池...

    安卓Android源码——网络监视器源码.zip

    这个"安卓Android源码——网络监视器源码.zip"压缩包提供了Android系统中网络监控功能的源代码,这对于开发者来说是一个宝贵的资源,可以帮助他们深入了解网络活动的监控机制。 首先,我们关注的是"源码说明.txt...

    Android_SystemSetting源码

    例如,`SystemSettingsService`中的`setXXX()`方法用于接收并处理设置更改请求,`SystemSettingsObserver`则用于监视系统设置的变化并作出响应。 总结,Android SystemSetting源码是理解Android系统如何管理用户...

    TextBack:一个Android应用程序,通过访问Android的内部数据库以获取有关最新SMS及其发送者的信息,从而提供了更频繁的SMS通知

    TextBack利用ContentObserver类,这是一种可以监视数据集变化的接口,当接收到新的短信时,ContentObserver会触发回调函数,通知应用程序有新的消息待处理。 其次,TextBack能够获取短信的详细信息,包括发送者和...

    Android最新资料以及源码

    18、Android手机里的滑动条源代码 共1个目标文件!简单。 19、Android团购信息源代码 共8个目标文件!简单的本地数据库操作!~ 20、Android网络交互判断网络连接的例子 共1个目标文件!简单。get方式访问一个url!...

    Android-Training-Course-in-Chinese

    - SQLite数据库的使用,包括创建表、插入数据、查询数据等。 12. **与其他应用的交互** - 发送Intent给其他应用,共享数据。 - 接收其他应用返回的数据。 - 使用Intent过滤器实现更高级的功能。 #### 二、...

    Android应用源码之电话、短信黑白名单拦截、电话录音.zip

    2. `ContentObserver`: 监视联系人和短信表的变化,以便实时更新黑白名单。 3. `SharedPreferences`: 存储用户设置的黑白名单数据。 4. `Service`: 如`CallBlockingService`,在后台运行以实现电话拦截。 5. `SQLite...

    疯狂Android讲义源码

    12. **Android组件交互**:如BroadcastReceiver、ContentObserver等,它们允许应用响应系统事件或监视数据变化。 13. **动画与特效**:Android提供了多种动画机制,包括属性动画、视图动画和过渡动画,可以增强应用...

    Android实验讲义

    - **学习目标**:掌握Android应用中常用的数据存储方式,包括文件存储、SharedPreferences、SQLite数据库等。 - **实验内容**: - 文件存储:使用File API进行简单的文件读写操作。 - SharedPreferences:保存...

    精通ANDROID 3(中文版)1/2

    7.4.7 使用菜单响应数据变化  7.5 通过XML文件加载菜单  7.5.1 XML菜单资源文件的结构  7.5.2 填充XML菜单资源文件  7.5.3 响应基于XML的菜单项  7.5.4 其他XML菜单标记简介  7.6 资源  7.7 小结  ...

    android——手机通讯录Demo

    这些API主要集中在`ContactsContract`类中,它是Android系统数据库中联系人数据的接口。开发者可以通过ContentResolver对象来访问这些API,进行查询、插入、更新和删除操作。 1. **同步系统通讯录**: 在这个项目...

    andbatdog监视电池.zip

    7. **数据持久化**: 为了记录电池历史数据,应用可能使用SQLite数据库存储电量变化趋势,以便用户查看过去一段时间内的电池使用情况。 通过分析`andbatdog监视电池`项目的源码,我们可以学习到如何在Android环境中...

    android下如何调试程序

    通过这些工具,开发者可以在程序运行时监视代码执行的流程,实时观察变量的变化,以及快速定位程序异常终止的位置。熟练掌握这些基本的调试技术,对于缩短开发周期、提高代码质量有着直接影响。 其次,利用Android ...

    Android技术面试整理

    37. DDMS和TraceView的区别在于DDMS主要用于监视和管理设备,而TraceView用于分析应用的性能,展示方法调用的详细时间。 38. Java中引用本地语言,可以通过JNI(Java Native Interface)实现。 39. Android的IPC...

Global site tag (gtag.js) - Google Analytics