Android数据库内容变化的监听(附件1)

AbstractCursor.java文件
/**
*Thisisanabstractcursorclassthathandlesalotofthecommoncode
*thatallcursorsneedtodealwithandisprovidedforconveniencereasons.
*/

publicabstractclassAbstractCursorimplementsCrossProcessCursor{
privatestaticfinalStringTAG="Cursor";

DataSetObservablemDataSetObservable=newDataSetObservable();
ContentObservablemContentObservable=newContentObservable();


-------------------省略------------------

publicvoiddeactivate(){
deactivateInternal();
}

/**
*@hide
*/

publicvoiddeactivateInternal(){
if(mSelfObserver!=null){
mContentResolver.unregisterContentObserver(mSelfObserver);
mSelfObserverRegistered=false;
}
mDataSetObservable.notifyInvalidated();
}

publicbooleanrequery(){
if(mSelfObserver!=null&&mSelfObserverRegistered==false){
mContentResolver.registerContentObserver(mNotifyUri,true,mSelfObserver);
mSelfObserverRegistered=true;
}
mDataSetObservable.notifyChanged();
returntrue;
}

publicbooleanisClosed(){
returnmClosed;
}

publicvoidclose(){
mClosed=true;
mContentObservable.unregisterAll();
deactivateInternal();
}

-------------------省略------------------
publicvoidregisterContentObserver(ContentObserverobserver){
mContentObservable.registerObserver(observer);
}

publicvoidunregisterContentObserver(ContentObserverobserver){
//cursorwillunregisterallobserverswhenitclose
if(!mClosed){
mContentObservable.unregisterObserver(observer);
}
}

/**
*Thisishiddenuntilthedatasetchangemodelhasbeenre-evaluated.
*@hide
*/

protectedvoidnotifyDataSetChange(){
mDataSetObservable.notifyChanged();
}

/**
*Thisishiddenuntilthedatasetchangemodelhasbeenre-evaluated.
*@hide
*/

protectedDataSetObservablegetDataSetObservable(){
returnmDataSetObservable;

}
publicvoidregisterDataSetObserver(DataSetObserverobserver){
mDataSetObservable.registerObserver(observer);

}

publicvoidunregisterDataSetObserver(DataSetObserverobserver){
mDataSetObservable.unregisterObserver(observer);
}

/**
*Subclassesmustcallthismethodwhentheyfinishcommittingupdatestonotifyall
*observers.
*
*@paramselfChange
*/

protectedvoidonChange(booleanselfChange){
synchronized(mSelfObserverLock){
mContentObservable.dispatchChange(selfChange);
if(mNotifyUri!=null&&selfChange){
mContentResolver.notifyChange(mNotifyUri,mSelfObserver);
}
}
}

/**
*SpecifiesacontentURItowatchforchanges.
*
*@paramcrThecontentresolverfromthecaller'scontext.
*@paramnotifyUriTheURItowatchforchanges.Thiscanbea
*specificrowURI,orabaseURIforawholeclassofcontent.
*/

publicvoidsetNotificationUri(ContentResolvercr,UrinotifyUri){
synchronized(mSelfObserverLock){
mNotifyUri=notifyUri;
mContentResolver=cr;
if(mSelfObserver!=null){
mContentResolver.unregisterContentObserver(mSelfObserver);
}
mSelfObserver=newSelfContentObserver(this);
mContentResolver.registerContentObserver(mNotifyUri,true,mSelfObserver);
mSelfObserverRegistered=true;
}
}
-------------------省略------------------
@Override
protectedvoidfinalize(){
if(mSelfObserver!=null&&mSelfObserverRegistered==true){
mContentResolver.unregisterContentObserver(mSelfObserver);
}
}

/**
*CursorsusethisclasstotrackchangesothersmaketotheirURI.
*/

protectedstaticclassSelfContentObserverextendsContentObserver{
WeakReference<AbstractCursor>mCursor;

publicSelfContentObserver(AbstractCursorcursor){
super(null);
mCursor=newWeakReference<AbstractCursor>(cursor);
}

@Override
publicbooleandeliverSelfNotifications(){
returnfalse;
}

@Override
publicvoidonChange(booleanselfChange){
AbstractCursorcursor=mCursor.get();
if(cursor!=null){
cursor.onChange(false);
}
}
}
-------------------省略------------------
protectedContentResolvermContentResolver;
protectedbooleanmClosed=false;
privateUrimNotifyUri;
privateContentObservermSelfObserver;
finalprivateObjectmSelfObserverLock=newObject();
privatebooleanmSelfObserverRegistered;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值