`
jacky-zhang
  • 浏览: 315653 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Content Provider(以下简称为CP)的加载

阅读更多
在实际开发中,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_provider_demo

    综上所述,`content_provider_demo`项目涵盖了Content Provider的核心概念和使用方法,包括创建自定义Content Provider、使用UriMatcher、利用CursorLoader进行数据加载、通过ContentResolver进行数据交互以及权限...

    Content Provider获取联系人和图片

    在上述代码示例中,CPTest可能是一个测试应用或测试类,用于实践这些Content Provider的操作。实际开发中,应根据需求进行调整和优化,确保数据访问的安全性和效率。 总的来说,Content Provider是Android中数据...

    android content provider示例程序(简单记账)

    一个Content Provider通常包含以下几个关键部分: 1. **Provider类**:继承自`android.content.ContentProvider`,这是Content Provider的核心,负责数据的增删查改操作。你需要重写如`onCreate()`、`query()`、`...

    Content Provider的使用

    1. `onCreate()`: 当Content Provider被系统加载时调用,用于初始化操作。 2. `query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)`: 实现数据查询,返回`Cursor`...

    Android基础 Content Provider

    创建一个Content Provider主要涉及以下步骤: - 定义数据模型:首先,你需要确定要共享的数据结构,这通常涉及到数据库表的设计。 - 创建SQLite数据库:使用SQLiteOpenHelper扩展类来创建和管理数据库。 - 创建...

    content provider实现数据共享demo(内有两个项目)

    在这个"content provider实现数据共享demo"中,包含的两个项目将为我们展示Content Provider的实现过程。 首先,我们要理解Content Provider的基本结构。每个Content Provider都需要继承自`android.content....

    编写content provider

    创建Content Provider的步骤主要包括以下几点: 1. **定义数据模型**:确定你要共享的数据结构,通常会涉及到数据库表的设计。 2. **创建数据库**:如果数据存储在SQLite数据库中,需要创建一个SQLiteOpenHelper...

    android中Content Provider

    在Android系统中,Content Provider是四大组件之一,它是应用程序间数据共享的核心机制。Content Provider允许一个应用暴露其数据,使得其他应用可以读取或者写入这些数据,甚至跨应用程序进行数据交换。这篇博客...

    Android新手Content Provider获取通讯录,短信,通话记录

    理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。

    content provider.doc

    以下是对Content Provider的详细说明: 1. **Content Provider的概念**: 内容提供者是一个实现了特定接口的类,它封装了应用程序的数据并提供了标准的CRUD(创建、读取、更新、删除)操作。这使得其他应用能够...

    Android Content Provider Demo

    在Android开发中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和...通过实践这个Demo,开发者可以掌握Content Provider的基本用法,为以后的项目开发打下坚实的基础。

    content provider 和sqllite用法整理

    在Android开发中,Content Provider和SQLite数据库是两个非常重要的组件,它们主要用于数据的存储和共享。下面将详细讲解这两个概念及其用法。 首先,我们来理解Content Provider。Content Provider是Android系统...

    四大组件 Activity Service content provider broadcast receiver

    - **实现:** 实现Content Provider主要涉及以下几个步骤: - **声明:** 在`AndroidManifest.xml`中声明Content Provider。 - **注册:** 通过实现`ContentProvider`抽象类并重写其方法。 - **访问:** 应用程序...

    Content Provider

    开发者应该在 Content Provider 的设计中考虑到以下几点: - **权限控制**:使用权限来限制哪些应用程序可以访问特定的数据。 - **数据验证**:在插入或更新数据之前,确保数据格式正确无误。 - **内容观察者**:...

    简单实现自己的Content Provider(一)

    在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序之间可以安全地访问和操作数据。这篇博客“简单实现自己的Content Provider(一)”旨在引导开发者如何从零开始构建一...

    使用Content Provider案例

    一个Content Provider主要由以下几个关键组件构成: 1. **ContentContract(数据契约)**:定义了数据表的结构,包括常量类,用于存储URI路径和数据列名。 2. **ContentProvider类**:继承自Android的...

    2011.09.07(4)——— android 跨进程通信之content provider

    1. `onCreate()`: 当Content Provider被系统加载时调用,用于进行初始化操作。 2. `query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)`: 根据传入的Uri、投影...

    android 自定义 Content Provider示例

    一个完整的Content Provider主要包含以下部分: 1. **ContentContract(数据契约类)**:定义数据模型和URI常量,如表名、列名以及用于操作数据的URI路径。例如: ```java public class MyContract { public ...

    Android内容提供者(Content provider)

    2. **URI匹配**:通过`UriMatcher`类,可以为不同的URI路径设置相应的操作代码,以便在Content Provider中处理不同类型的请求。 3. **数据表操作**:通常,Content Provider会与SQLite数据库配合,通过SQL语句对...

Global site tag (gtag.js) - Google Analytics