`

ContentProvider内部机制

 
阅读更多

1ContentProvider接口调用过程

    ContentProvider依赖ContentResolver/ActivityThread/ActivityManagerService对外提供服务。虽然ContentProvider的用法以及表现形式不是一个Service,实际上它可以看作是ActivityManagerService提供的一种服务它实现了IBinder接口。

    首先调用者通过特定uri调用特定ContentProvider的接口函数,比如insert(),  此时ContentResolver会通过uri获取特定ContentProvider的实例,ActivityThread检查本地Cache,如果发现此ContentProvider已经被引用过,则直接直接取出ContentProvider返回给调用者。如果没有发现,由于 ContentProvider可能已经被load了,可能还没有load;可能要创建Process,可能要检查permission,所以ActivityThread调用到ActivityManagerService来进行相关处理/检查。如果该ProviderSingle ProcessActivityManagerService会为ContentProvider创建一个独立Process;如果是MultiProcess,说明每个调用者可以拥有独立的ContentProvider实例,于是ActivityManagerService只是返回ContentProvider的相关信息给ActivityThread,由ActivityThread负责ContentProvider的实例化,此时ContentProvider运行在调用者Process中。实例化后,IConentProvider会返回给调用者,通过该接口可以调用所需功能。

    ActivityThread本地维护一个mProviderMap <ProviderName, ProviderRecord >,记录已被引用的ContentProvider,  同时使用引用计数mProviderRefCountMap <IBinder, ProviderRefCount>记录特定ContentProvider的引用情况


2ContentProvider实例创建过程

     ContentProvider实例的创建与multiprocess属性有关系(Androidmanifest.xml里指定),个人认为理解成多进程并不准确。应该理解为ContentProvider的多实例,不会存在多个ContentProvider进程的情况,ContentProvider 可能存在多个实例。

 

  • 大小: 37.8 KB
分享到:
评论

相关推荐

    Android开发艺术探索.任玉刚(带详细书签).pdf

    5.2 RemoteViews的内部机制 230 5.3 RemoteViews的意义 239 第6章 Android的Drawable 243 6.1 Drawable简介 243 6.2 Drawable的分类 244 6.2.1 BitmapDrawable 244 6.2.2 ShapeDrawable 247 6.2.3 ...

    Android开发艺术探索

     5.2 RemoteViews的内部机制 / 230  5.3 RemoteViews的意义 / 239  第6章 Android的Drawable / 243  6.1 Drawable简介 / 243  6.2 Drawable的分类 / 244  6.2.1 BitmapDrawable / 244  6.2.2 ShapeDrawable /...

    疯狂Android讲义源码

     3.3.1 回调机制与监听机制 156  3.3.2 基于回调的事件传播 158  3.3.3 重写onTouchEvent方法响应  触摸屏事件 160  3.4 响应的系统设置的事件 162  3.4.1 Configuration类简介 162  3.4.2 重写...

    疯狂Android讲义.part2

    3.3.1 回调机制与监听机制 156 3.3.2 基于回调的事件传播 158 3.3.3 重写onTouchEvent方法响应 触摸屏事件 160 3.4 响应的系统设置的事件 162 3.4.1 Configuration类简介 162 3.4.2 重写onConfigurationChanged 响应...

    疯狂Android讲义.part1

    3.3.1 回调机制与监听机制 156 3.3.2 基于回调的事件传播 158 3.3.3 重写onTouchEvent方法响应 触摸屏事件 160 3.4 响应的系统设置的事件 162 3.4.1 Configuration类简介 162 3.4.2 重写onConfigurationChanged 响应...

    深入理解Android:卷2,中文完整扫描版

    《深入理解Android:卷2》不仅继承了第1本书的优点并改正了其在细微处存在的一些不足,而且还在写作的总体思想上进行了创新,更强调从系统设计者的角度去分析Android系统中各个模块内部的实现原理和工作机制。...

    深入理解Android(卷2)

    《深入理解Android:卷2》不仅继承了第1本书的优点并改正了其在细微处存在的一些不足,而且还在写作的总体思想上进行了创新,更强调从系统设计者的角度去分析Android系统中各个模块内部的实现原理和工作机制。...

    CamCipher:相机密码库,用于基于IOCipher的加密照片和视频捕获

    此示例演示如何直接从“相机”传感器捕获静态照片(作为内存中的byte []数组),将其直接存储为加密的JPEG文件,并将其存储在IOCipher内部,然后再将该文件作为内存中的字节共享[ ]或直接来自ContentProvider的流。...

    Android自主学习项目报告(一).doc

    第三层是应用程序框架层,提供了Android平台基本 的管理功能和组件重用机制;第四层是应用程序层,提供了一系列核心应用程序。 src 源代码目录 gen 目录(R.java文件是ADT自动生成,不能手动修改,R.java作用:src中...

Global site tag (gtag.js) - Google Analytics