本文部分参考http://www.cnblogs.com/ufocdy/archive/2011/03/17/1987327.html

主要是以简单的语言说明cursor和cursorAdapter的监听机制

先来讲讲cursor的监听机制,

给cursor加监听很简单,调用cursor.registerContentOberserver()即可,然后重写onChange()方法,这样数据库变化,就会回调onChange方法

背后的监听机制是什么呢?

cursor是接口,实现应该是在AbstractCursor里面,AbstractCursor有一个ContentObservable继承自Observable,这个就是经典的观察者模式了,

调用这个方法后,会向这里注册一个观察者,来监控数据库

现在有观察者了,那数据库变化,又是怎么通知过来的呢?

还记得自定义provider的时候,有一句必须要加的话不?在add和update和delete的时候--->cur.setNotificationUri(getContext().getContentResolver(), uri);

这里就是通知observer数据库变化的,其实是通知AbstractCursor的setNotificationUri

public void setNotificationUri(ContentResolver cr, Uri notifyUri) {
synchronized (mSelfObserverLock) {
mNotifyUri = notifyUri;
mContentResolver = cr;
if (mSelfObserver != null) {
mContentResolver.unregisterContentObserver(mSelfObserver);
}
mSelfObserver = new SelfContentObserver(this);
mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver);
mSelfObserverRegistered = true;
}
}

然后上面我们不是刚好通过cursor在这个AbstractCursor中加入了观察者么?原来世界如此美好,数据库的变化一切尽在监控之中

再来说说cursorAdapter的监听

cursorAdapter自己内部已经做好了监听,你想在数据库变化后做一些改变,只要重写onContentChanged()即可

那么它是如何监听的呢?

其实他的机制和上面的cursor是一样,在你调用cusoradapeter.changeCursor方法的时候,系统会调用一个 cursorAdapter.registerContentObserver和registerDatasetObserver,同时取消上次注册的监 听

然后呢?然后就没有然后了,你坐等数据库变化就可以了

更多相关文章

  1. Android(安卓)自定义kotlin中BaseRecyclerViewAdapter
  2. Android锁屏与解锁广播状态监听
  3. Android(安卓)ViewPager事件滑动监听修改
  4. android开发之路04(初级android工程师必会,你懂得!)
  5. Android(安卓)轮播图---ViewFlipper
  6. Android(安卓)架构组件 —— Lifecycle-aware Components [一]
  7. Android(安卓)SQLite 数据库存储详解
  8. 用android studio写一个简单并且bug奇多的计算器
  9. Android多线程下安全访问数据库

随机推荐

  1. 创建Android虚拟设备(AVD)
  2. Android SDK Manager
  3. Android横竖屏布局总结
  4. 关于AVD启动失败的问题--找不到文件篇
  5. Android 4.4(KitKat)窗口管理子系统 - 体
  6. Android(安卓)禁止EditView弹出软键盘问
  7. Android程序测试(2)——Activity测试
  8. 如何在Android中使用离线的谷歌地图Googl
  9. 《Android经验分享》周刊第10期
  10. Android 显示系统键盘搜索按键,实现搜索功