DatasetObserver与ContentObserver

2023-12-16 14:48

本文主要是介绍DatasetObserver与ContentObserver,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过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的表:
比如:
Java代码   收藏代码
  1. public class TestContentObserver extends Activity {  
  2.     MyContentObserver mco;  
  3.     /** Called when the activity is first created. */  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.         mco=new MyContentObserver(new MyHandler());  
  9.           
  10.           
  11.     }  
  12.     @Override  
  13.     protected void onResume() {  
  14.         // TODO Auto-generated method stub  
  15.         super.onResume();  
  16.     getApplicationContext().getContentResolver().registerContentObserver(Contacts.CONTENT_URI, true, mco);  
  17.     }  
  18.       
  19.     class MyHandler extends Handler{  
  20.         @Override  
  21.         public void handleMessage(Message msg) {  
  22.             // TODO Auto-generated method stub  
  23.             super.handleMessage(msg);  
  24.         }  
  25.     };  
  26.       
  27.     class MyContentObserver extends ContentObserver{  
  28.   
  29.         public MyContentObserver(Handler handler) {  
  30.             super(handler);  
  31.             // TODO Auto-generated constructor stub  
  32.         }  
  33.         @Override  
  34.         public void onChange(boolean selfChange) {  
  35.             // TODO Auto-generated method stub  
  36.             super.onChange(selfChange);  
  37.             System.out.println("onChange "+selfChange);  
  38.         }  
  39.           
  40.         @Override  
  41.         public boolean deliverSelfNotifications() {  
  42.             // TODO Auto-generated method stub  
  43.             return super.deliverSelfNotifications();  
  44.             //return true;  
  45.         }  
  46.     };  
  47. }  
[java] view plain copy
  1. public class TestContentObserver extends Activity {  
  2.     MyContentObserver mco;  
  3.     /** Called when the activity is first created. */  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.         mco=new MyContentObserver(new MyHandler());  
  9.           
  10.           
  11.     }  
  12.     @Override  
  13.     protected void onResume() {  
  14.         // TODO Auto-generated method stub  
  15.         super.onResume();  
  16.     getApplicationContext().getContentResolver().registerContentObserver(Contacts.CONTENT_URI, true, mco);  
  17.     }  
  18.       
  19.     class MyHandler extends Handler{  
  20.         @Override  
  21.         public void handleMessage(Message msg) {  
  22.             // TODO Auto-generated method stub  
  23.             super.handleMessage(msg);  
  24.         }  
  25.     };  
  26.       
  27.     class MyContentObserver extends ContentObserver{  
  28.   
  29.         public MyContentObserver(Handler handler) {  
  30.             super(handler);  
  31.             // TODO Auto-generated constructor stub  
  32.         }  
  33.         @Override  
  34.         public void onChange(boolean selfChange) {  
  35.             // TODO Auto-generated method stub  
  36.             super.onChange(selfChange);  
  37.             System.out.println("onChange "+selfChange);  
  38.         }  
  39.           
  40.         @Override  
  41.         public boolean deliverSelfNotifications() {  
  42.             // TODO Auto-generated method stub  
  43.             return super.deliverSelfNotifications();  
  44.             //return true;  
  45.         }  
  46.     };  
  47. }  

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
Java代码   收藏代码
  1. mSuggestionsAdapter.registerDataSetObserver(new SuggestionsObserver());

  2. private class SuggestionsObserver extends DataSetObserver {  
  3.        @Override  
  4.        public void onChanged() {  
  5.            updateInputMethodSuggestions();  
  6.        }  
  7.    } 

这篇关于DatasetObserver与ContentObserver的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500853

相关文章

使用ContentObserver监听事件变化并及时刷新列表效果

在开发中需要列表的及时刷新,刚开始每次都是重新查询数据再渲染列表,可以这样的话速度十分慢,后来查了一下,发现使用ContentObserver可以实现这种效果。以下是具体代码:     class MyObserver extends ContentObserver {private Cursor cursor = null;public MyObserver(Handler

android ContentObserver和DatasetObserver的区别

1. ContentObserver     ContentObserver主要是通过Uri来监测特定的Databases的表,如果该Databases表有变动则会通知更新cursor中的数据。     如果使用ContentProvider操作数据库,在ContentProvider的query()方法中会通过Cursor.setNotificationUri()注册uri描述的表,在

使用ContentObserver监听ContentProvider中数据的变化

如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者,例子如下: public class PersonContentProvider extends ContentProvi

动态使用ContentObserver的问题

笔者在使用ContentObserver来监控一些设置的变化时,对于跨进程来通讯来说是非常方便的。但是笔者也遇到一些问题,比如我能不能动态的监控呢?   好比这种情况,我设置了某个设置的监听,也收到了这个设置的变化通知,但是处于有些原因,我又要把这个设置项的值修改成其他特殊需求的值,如果不改变监听的话,我自己设置进入新值以后,我的监听函数不是一样被执行了嘛!这是我不希望发生的,笔

ContentObserver的小demo 注册和取消注册

主要的代码是注册和取消注册   注册需要在onCreate 或者是onResume里面 而反注册要和上面的对应了, 就是onDestory 或者是onPause里面   package bjpkten.aclient;import android.Manifest;import android.content.ComponentName;import android.content.