Android内容提供者(ContentProvider)浅析(三)

这一篇要说两个问题,一个是ContentProvider数据监听机制,另一个就是ContentProviderConnection这个东东。

ContentProvider中的监听机制是一个观察者模式的实现。从使用方式就可以看出来

getContentResolver().registerContentObserver(CONTENT_URI, true, mContentObserver);

getContentResolver().notifyChange(changed_content_uri, null);

    public final void registerContentObserver(Uri uri, boolean notifyForDescendents,
            ContentObserver observer, int userHandle)
    {
        try {
            getContentService().registerContentObserver(uri, notifyForDescendents,
                    observer.getContentObserver(), userHandle);
        } catch (RemoteException e) {
        }
    }

 

    public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork,
            int userHandle) {
        try {
            getContentService().notifyChange(
                    uri, observer == null ? null : observer.getContentObserver(),
                    observer != null && observer.deliverSelfNotifications(), syncToNetwork,
                    userHandle);
        } catch (RemoteException e) {
        }
    }

 

从这两个方法上来看,并没有直接将Observer注册在ContentProvider中,它们之间还有一个中介,而这个就是ContentService。顾名思义,这是一个服务并且呢是一个系统级的服务。这倒是符合android设计的一贯原则,将管理的工作都交给系统服务来做,关于这个类的详细介绍可以参见此博文:http://blog.csdn.net/banketree/article/details/9188179

还有一个请注意,这里的内容监听操作涉及到客户端、provider和contentservice三个进程,所以理所当然的也有跨进程哦,这里的跨进程操作主要是发生在ContentObserver这里,是它里面的Transport来实现的。

然后说一下ContentProviderConnection,其实这个玩意我也没有弄明白,字面上意思看就是一个共享数据连接,但是看起实现也没有任何起到连接通道以及传输的意思,只是单纯的客户端进程记录与当前内容提供者记录的容器只是本身继承于Binder,并且看其使用也多数是在ActivityManagerService中注册和移除Provider的时候。可能还真是一个可以在进程间传递并且保持相互引用关系的东东,这个有谁能全面分析一下的可以留言告诉在下,不甚感激。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值