Step 5.ActivityThread.getProvider 这个函数定义在frameworks/base/core/java/android/app/ActivityThread.java文件中:
  1. publicfinalclassActivityThread{
  2. ......
  3. privatefinalIContentProvidergetExistingProvider(Contextcontext,Stringname){
  4. synchronized(mProviderMap){
  5. finalProviderClientRecordpr=mProviderMap.get(name);
  6. if(pr!=null){
  7. returnpr.mProvider;
  8. }
  9. returnnull;
  10. }
  11. }
  12. ......
  13. privatefinalIContentProvidergetProvider(Contextcontext,Stringname){
  14. IContentProviderexisting=getExistingProvider(context,name);
  15. if(existing!=null){
  16. returnexisting;
  17. }
  18. IActivityManager.ContentProviderHolderholder=null;
  19. try{
  20. holder=ActivityManagerNative.getDefault().getContentProvider(
  21. getApplicationThread(),name);
  22. }catch(RemoteExceptionex){
  23. }
  24. IContentProviderprov=installProvider(context,holder.provider,
  25. holder.info,true);
  26. ......
  27. returnprov;
  28. }
  29. ......
  30. }
这个函数首先会通过getExistingProvider函数来检查本地是否已经存在这个要获取的ContentProvider接口,如果存在,就直接返回了。本地已经存在的ContextProvider接口保存在ActivityThread类的mProviderMap成员变量中,以ContentProvider对应的URI的authority为键值保存。在我们这个情景中,因为是第一次调用ArticlesProvider接口,因此,这时候通过getExistingProvider函数得到的IContentProvider接口为null,于是下面就会调用ActivityManagerService服务的getContentProvider接口来获取一个ContentProviderHolder对象holder,这个对象就包含了我们所要获取的ArticlesProvider接口,在将这个接口返回给调用者之后,还会调用installProvider函数来把这个接口保存在本地中,以便下次要使用这个ContentProvider接口时,直接就可以通过getExistingProvider函数获取了。 我们先进入到ActivityManagerService服务的getContentProvider函数中看看它是如何获取我们所需要的ArticlesProvider接口的,然后再返回来看看installProvider函数的实现。 Step 6.ActivityManagerService.getContentProvider 这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中:
  1. publicfinalclassActivityManagerServiceextendsActivityManagerNative
  2. implementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback{
  3. ......
  4. publicfinalContentProviderHoldergetContentProvider(
  5. IApplicationThreadcaller,Stringname){
  6. ......
  7. returngetContentProviderImpl(caller,name);
  8. }
  9. ......
  10. }
它调用getContentProviderImpl函数来进一步执行操作。

更多相关文章

  1. 自定义圆角button上下间距问题
  2. Android Wifi模块相关常量定义.
  3. C语言函数以及函数的使用
  4. Android 自定义ProgressBar--进度自己设置图片
  5. Android_自定义View拖拽重绘
  6. android 自定义具有反弹效果的ScrollView
  7. android自定义对话框工具类
  8. 自定义dialog的style属性说明
  9. TabHost自定义标签页(二)

随机推荐

  1. 安卓绘制五角星
  2. android new socket异常
  3. android mask setXfermode
  4. bitmap 压缩 compress
  5. Android(安卓)object size in Dalvik
  6. Space-Navigation-View 底部栏点击
  7. android aar 混淆
  8. MPAndroidChart :二,饼图PieChart
  9. Android(安卓)Eventbus发送消息
  10. Android聊天界面布局实例