内容观察者是做什么的?
内容观察者主要用来观察数据库是否被操作了。
以查询数据库为例:
首先注册一个内容观察者(App1):
1 //false 观察的Uri必须是一个确切的Uri 如果是true,只需要匹配一个主机名,后面所有的操作都生效 2 getContentResolver().registerContentObserver(uri,true,new MyContentObserver(new Handler())); 3 4 5 private class MyContentObserver extends ContentObserver{ 6 7 /** 8 * Creates a content observer. 9 * 10 * @param handler The handler to run {@link #onChange} on, or null if none. 11 */ 12 public MyContentObserver(Handler handler) { 13 super(handler); 14 } 15 16 //当观察的Uri发生改变的时候执行 17 @Override 18 public void onChange(boolean selfChange) { 19 System.out.println("数据库被操作了!!!!!"); 20 super.onChange(selfChange); 21 } 22 }
onChange()方法:当观察的Uri的数据库被操作的时候,会执行onChange()方法。
App2操作数据库:
1 private void doQuery(){ 2 Uri uri = Uri.parse("content://com.coderwei.provider/query"); 3 Cursor cursor = getContentResolver().query(uri,new String[]{"name","money"},null,null,null); 4 5 6 if (cursor!=null){ 7 //如果操作了数据库,就发出一个通知 8 this.getContentResolver().notifyChange(uri,null); 9 while (cursor.moveToNext()){ 10 String name = cursor.getString(0); 11 String money = cursor.getString(1); 12 System.out.println("name:"+name+" money: "+money); 13 } 14 } 15 }