内容监听器ContentObserver

内容监听器ContentObserver
android.database.ContentObserver
构造函数
publicContentObserver(Handlerhandler)
onChange()willhappenontheproviderHandler.
参数
handlerThehandlertorunonChange(boolean)on.
主要函数
publicbooleandeliverSelfNotifications()
Returnstrueifthisobserverisinterestedinnotificationsforchangesmadethroughthecursortheobserverisregisteredwith.
注:这个函数的使用还是puzzle.
publicfinalvoiddispatchChange(booleanselfChange)
注:这个是为提供用handler执行onChange的一个接口。所以一般比没必要重载它。
publicvoidonChange(booleanselfChange)
Thismethodiscalledwhenachangeoccurstothecursorthatisbeingobserved.
参数
selfChangetrueiftheupdatewascausedbyacalltocommitonthecursorthatisbeingobserved.
注1:这个就是我们需要重载的函数,在里面可以实现对内容改变的个性化响应。
源码如下:
package android.database; 
import android.os.Handler;
  /**
  * Receives call backs for changes to content. Must be implemented by objects which are added
  * to a {@link ContentObservable}.
  */
 public abstract class ContentObserver {
      private Transport mTransport;
      // Protects mTransport
      private Object lock = new Object();
      /* package */ Handler mHandler;
      private final class NotificationRunnable implements Runnable {
          private boolean mSelf;
          public NotificationRunnable(boolean self) {
             mSelf = self;
         }
          public void run() {
             ContentObserver.this.onChange(mSelf);
         }
     }
      private static final class Transport extends IContentObserver.Stub {
         ContentObserver mContentObserver;
          public Transport(ContentObserver contentObserver) {
             mContentObserver = contentObserver;
         }
          public boolean deliverSelfNotifications() {
             ContentObserver contentObserver = mContentObserver;
             if (contentObserver != null) {
                 return contentObserver.deliverSelfNotifications();
             }
             return false;
         }
          public void onChange(boolean selfChange) {
             ContentObserver contentObserver = mContentObserver;
             if (contentObserver != null) {
                 contentObserver.dispatchChange(selfChange);
             }
         }
          public void releaseContentObserver() {
             mContentObserver = null;
         }
     }
      /**
      * onChange() will happen on the provider Handler.
      *      * @param handler The handler to run {@link #onChange} on.
      */
     public ContentObserver(Handler handler) {
         mHandler = handler;
     }
      /**
      * Gets access to the binder transport object. Not for public consumption.
      *      * {@hide}
      */
     public IContentObserver getContentObserver() {
         synchronized(lock) {
             if (mTransport == null) {
                 mTransport = new Transport(this);
             }
             return mTransport;
         }
    }
      /**
      * Gets access to the binder transport object, and unlinks the transport object
      * from the ContentObserver. Not for public consumption.
      *
      * {@hide}
      */
     public IContentObserver releaseContentObserver() {
         synchronized(lock) {
             Transport oldTransport = mTransport;
             if (oldTransport != null) {
                 oldTransport.releaseContentObserver();
                 mTransport = null;
             }
             return oldTransport;
         }
     }
      /**
      * Returns true if this observer is interested in notifications for changes
      * made through the cursor the observer is registered with.
      */
     public boolean deliverSelfNotifications() {
         return false;
     }
      /**
      * This method is called when a change occurs to the cursor that
      * is being observed.
      *
      * @param selfChange true if the update was caused by a call to <code>commit</code> on the
      *  cursor that is being observed.
      */
     public void onChange(boolean selfChange) {}
      public final void dispatchChange(boolean selfChange) {
         if (mHandler == null) {
             onChange(selfChange);
         } else {
             mHandler.post(new NotificationRunnable(selfChange));
         }
     }
 }
注1:代码来源 http://hi-android.info/src/android/database/ContentObserver.java.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值