内容观察者

来源:互联网 发布:linux查看实时日志命令 编辑:程序博客网 时间:2024/05/16 17:03

内容观察者

在对数据库操作的时候,有时候我们会遇见一些特殊的需求,要求应用3去观察应用1数据库中的数据由于应用2发生的变化,通常大家都会想到可以使用广播的方式,但是android中对此创建了一个API,ContentObserver(内容观察者),就是用来观察数据库一旦改变就发出消息。让使用者做出处理。

内容观察者如何使用:

【1】注册内容观察者

Uri uri =uri.parse("content://com.aaa.provider);//其中第二参数时一个boolean,如果为true,表示uri可以时非完整的路径,如果是false,就必须要是一个完整的uri,上面的uri就是非完整的。第三个参数是contentReservergetContentResolver().registerContentObserver(uri,true,new MyContentObserver);

第三个参数需要内容观察者,我们就定义一个。这个类是一个抽象类,所以我们必须要去继承。

private class MyContentObserver extends ContentObserver{/** * Creates a content observer. * * @param handler The handler to run {@link #onChange} on, or null if none. */public MyContentObserver(Handler handler) {    super(handler);}/** * 当内容发生改变时调用 * @param selfChange */@Overridepublic void onChange(boolean selfChange) {    Log.e("------------","数据库发生改变");    super.onChange(selfChange);}}

同时要想接收到数据库改变的消息,我们还必须要在其他应用对数据库操作后自己发送一个消息,

 getContext(). getContentResolver().notifyChange(uri,observer);其中第二个参数为内容观察者,如果知道要发送的对象,可以直接指定,如果想要发送给多个内容观察者,或者不清楚接收者,就可以指定为null

这样我们就可以在数据发生改变的时候接收到消息,然后做出相应的处理,比如我们的图片库或者媒体库,如果有一个应用添加了一张图片或者一段音乐到数据库,并且发送了消息给内容观察者,这时候图片库和媒体库就可以刷新数据,接收到新的数据,不然图片库或者媒体库中是无法找到该数据的。

0 0
原创粉丝点击