Android ContentObserver

本文详细介绍了ContentObserver的内容观察机制,它是Android框架中用于监控特定Uri变化的重要组件。文章解释了ContentObserver如何模仿数据库触发器的工作原理,并区分了针对不同数据规模(如多条或单条记录)的表和行ContentObserver。此外,还提供了ContentResolver中用于注册、取消注册ContentObserver以及通知变化的相关方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器,相应地ContentObserver也分为“表“ContentObserver、“行”ContentObserver,当然这是与它所监听的Uri MIME Type有关的。


 熟悉Content Provider(内容提供者)的应该知道,我们可以通过UriMatcher类注册不同类型的Uri,我们可以通过这些不同的Uri来查询不同的结果。根据Uri返回的结果,Uri Type可以分为:返回多条数据的Uri、返回单条数据的Uri。


// ContentResolver中注册和取消ContentObserver的方法
/**
  * @param uri   ContentObserver观察的uri
  * @param notifyForDescendents    当派生Uri中数据发生改变时是否Observer,
 *  false 精确匹配,只有该Uri下记录发生改变时会接收到改变事件 
 *    true 当派生Uri...   
  * @param observer 
  */
public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)
public final void unregisterContentObserver(ContentObserver observer)

// ContentResolver有一个notifyChangr()方法,去通知Uri发生了改变,一般使用在ContentProvider中,当数据改变时去通知Observer
public void notifyChange(Uri uri, ContentObserver observer)  // 指定的Observer一定会接收到通知,因为可能一个Uri被多个观察者关注,可以为null
public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork)
public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork, int userHandle)

// <a target=_blank href="http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/database/ContentObserver.java#ContentObserver"><span class="entity-name" title="android.database.ContentObserver">android.database.ContentObserver</span></a>类方法
public void onChange(boolean selfChange)
public void onChange(boolean selfChange, Uri uri)
public void onChange(boolean selfChange, Uri uri, int userId)
public final void dispatchChange(boolean selfChange, Uri uri)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值