android Application Component研究之ContentProvider

本文探讨了Android中ContentProvider作为进程间数据访问的解决方案。ContentProvider基于IPC通信,通过ContentResolver进行数据交互。详细分析了ContentResolver的acquire provider、ContentProviderClient和ContentProviderOperation。同时介绍了ContentProvider的权限管理,包括Read/Write permission、grantUriPermissions以及Path Permission的使用,阐述了如何在不同场景下授予访问权限。
摘要由CSDN通过智能技术生成

    本文为原创文章,欢迎转载!转载时请注明出处:http://blog.csdn.net/windskier

    android在实现进程间数据访问时,对不同的进程不同Application的数据访问提供了一套解决方案,这套解决方案便是ContentProvider。在开发应用程序时,想要访问其他进程的数据,ContentProvider便是不二的选择。

    Content Provider其实很简单,其实质就是IPC通信,通过提供一个IInterface给Client来访问当前进程的数据。下面来分析一下Content Provider的管理过程。

1. ContentResolver

    ContentResolver为application访问ContentProvider提供一套接入机制,有了ContentResolver,使application访问ContentProvider变得相当轻松。
    ContentResolver是一个抽象类,对于Application访问Provider的接口,Android提供了ContentResolver的一个子类ApplicationContentResolver,通过ApplicationContentResolver来获取provider。
    ApplicationContentResolver定义在ContextImpl.java中。

1.1 acquire provider

    ApplicationContentResolver是在Application请求对指定Uri进程数据操作时,根据Uri中包含的authority来获取相应的Provider。下面的序列图给出了acquire provider的过程。



    由上面的时序图中可以看出,Client需要向AMS请求获取相应的provider,这个Provider在AMS中以一个ContentProviderRecord类型的对象来管理的。ContentProviderRecord 是一个Parcelable类型,可以作为AMS返回值返回给Client进程。通过返回ContentProviderHolder对象,AMS可以提供给Client所请求的Provider。
    下面的类图给出了ContentProviderRecord与Provider的关系,可以从中看出Client通过ContentProviderRecord中提供的IContentProvider接口来访问Provider,不过有些情况下,Client可以本地创建Provier访问数据,此时Client就可以直接通过下图中的Transport类型去操作数据,这个规程下面会介绍到。

    Provider是提供保护数据的接入访问的,我们可以在AndroidManifest.xml中设定它的运行进程,一般情况下,不同进程间,不同Application间的访问只能通过IPC来进行,但那是有些情况是可以允许Client在自己的进程中创建本地Provider来进行访问的。下面介绍一下那些情况下允许本地创建Provider的几种情况:
    1. 当Client和Provider处在同一个进程中时,并且Client的UID和Provider的UID相同(UID是系统为每个AndroidManifest.xml中的Application分配的,或者根据设定的android:sharedUserId)时;
    2. 当C
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值