在实际开发中,CP有以下两种用法:
1)和应用在一个APK包里
这种情况下和应用在同一进程中。process name和uid都一样。
2)单独在一个APK包里。
这种情况下,如果在AndroidManifest.xml文件里声明了和某个进程同属一个进程,如:
<manifest xmlns:android="
http://schemas.android.com/apk/res/android"
package="com.android.providers.telephony"
android:sharedUserId="android.uid.phone"
>
<application android:process="com.android.phone"
android:allowClearUserData="false"
android:label="Dialer Storage"
android:icon="@drawable/ic_launcher_phone">
<provider android:name="TelephonyProvider"
android:authorities="telephony"
android:multiprocess="true" />
这个里面通过android:sharedUserId="android.uid.phone"和android:process="com.android.phone"声明了该CP是和phone进程同属一个进程,拥有同样的process name和uid.
如果没有上述声明,那么该CP是在独立的进程中,拥有属于自己的process name和uid.
以上两种用法可以总结为:
1)CP和某个进程同属一个进程
这种情况下,当该进程启动时,会搜索属于该进程的所有CP,并加载。
2)CP属于独立的一个进程。
这种情况下,只有需要用到该CP时,才会去加载。
那么,当一个进程想要操作一个CP时,先需要获取该CP的对象,系统是如何处理呢:
1)如果该CP属于当前主叫进程,因为在进程启动时就已经加载过了,所以系统会直接返回该CP的对象。
2)如果该CP不属于当前主叫进程,那么系统会进行相关处理(由ActivityManagerService进行,以下简称为AMS):
所有已加载的CP信息都已保存在AMS中。当需要获取某个CP的对象时,AMS会先判断该CP是否已被加载
----如果已被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的 android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要通过 IPC机制进行调用。
----如果还未被加载,该CP和当前主叫进程不属一个进程,但是该CP设置了multiprocess的属性(如上例中的 android:multiprocess="true"),并且该CP属于系统级CP,那么就在当前主叫进程内部新生成该CP的对象。否则就需要先创建该CP所在的进程,然后再通过IPC机制进行调用。
分享到:
相关推荐
理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。
博文《android基础知识05:四大组件之content provider》的示例程序,实现了content provider 的基本功能。
Content Provider获取联系人和图片,博客链接:http://write.blog.csdn.net/postedit/43950781
content_provider_demo, provide data to other app, use cursorLoader to update view
四大组件 Activity Service content provider broadcast receiver
content provider实现数据共享demo(内有两个项目)
Android Content Provider Demo
Android Content Provider用法样例,解析如何使用“内容提供商”Content Provider共享不同应用的数据,本Android例子将使用Content Provider实现了获取联系人信息,里面的注释非常丰富,是学习android的好资料。
1、什么是内容提供者 2、怎样创建内容提供者 3、通过内容提供者完成CRUD操作 4、访问内容提供者 5、监听内容提供者数据变化 6、两个案例:监听短信以及操作联系人 最最重要的是包含了源码
android content provider学习过程中的笔记,希望对大家有帮助。
content provider和sqlite的详细介绍以及用法。。很好的资源,我自己整理的,相当有用,大家可以看看哈。。
这是使用Content Provider案例源码,详细讲解请移步http://blog.csdn.net/wei_zhi/article/details/52960073
Content Provider详解
NULL 博文链接:https://dampce032.iteye.com/blog/975663
关于Content Providers Content Providers 是所有应用程序之间数据存储和检索的一个桥梁,作用是使得各个...把18.SQLite和22.22.Content Provider添加到项目中,先运行18.SQLite,然后在进行22.Content Provider测试
简答的介绍了android中的content provider的用法比较适合刚入门的朋友们学习,希望看过后能够留下你所得的新的。谢谢
NULL 博文链接:https://zhangjiangxing-gmail-com.iteye.com/blog/1743648
NULL 博文链接:https://kevinlynx.iteye.com/blog/857721
content provider源码
自定义Content Provider,实现数据共享。