Android ContentObserver

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)



你可能感兴趣的:(android,ContentObserver)