监测Databases的改变:ContentObserver与DatasetObserver

前面有一篇关于Databases的NotifyChange:[url]http://aijiawang-126-com.iteye.com/blog/812004[/url]
其实这文章讲的就是通过ContentObserver来监测Databases的改变,并且做出相应的处理。
但对Databases的改变,除了可以通过ContentObserver来监测外,还可以通过DatasetObserver来监测。那我们来看看它们之间的区别

1,ContentObserver
Receives call backs for changes to content. Must be implemented by objects which are added to a ContentObservable.
接受回调去改变Content.
其实ContentObserver主要是通过Uri来监测特定的Databases的表:
比如:
public class TestContentObserver extends Activity {
MyContentObserver mco;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mco=new MyContentObserver(new MyHandler());


}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
getApplicationContext().getContentResolver().registerContentObserver(Contacts.CONTENT_URI, true, mco);
}

class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
};

class MyContentObserver extends ContentObserver{

public MyContentObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
System.out.println("onChange "+selfChange);
}

@Override
public boolean deliverSelfNotifications() {
// TODO Auto-generated method stub
return super.deliverSelfNotifications();
//return true;
}
};
}

registerContentObserver(Contacts.CONTENT_URI, true, mco);通过对Contacts.CONTENT_URI的监测,当Contacts发生变化就会call back回调mco里面的onChange方法来处理变化。

2,DatasetObserver
Receives call backs when a data set has been changed, or made invalid. The typically data sets that are observed are Cursors or Adapters. DataSetObserver must be implemented by objects which are added to a DataSetObservable.
DatasetObserver当数据集改变或者无效时,就会回调相应的函数做出处理,而典型的数据集就是cursor或者adapters.
这就是说通过cursor或者adapters的改变来做出相应的处理。
比如:QuickSearchBox中的SuggestionsAdapter
 mSuggestionsAdapter.registerDataSetObserver(new SuggestionsObserver()); private class SuggestionsObserver extends DataSetObserver {
@Override
public void onChanged() {
updateInputMethodSuggestions();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值