首页 文章 精选 留言 我的

精选列表

搜索[content],共9182篇文章
优秀的个人博客,低调大师

Android应用程序组件Content Provider的启动过程源代码分析(2)

Step 5.ActivityThread.getProvider 这个函数定义在frameworks/base/core/java/android/app/ActivityThread.java文件中: publicfinalclassActivityThread{ ...... privatefinalIContentProvidergetExistingProvider(Contextcontext,Stringname){ synchronized(mProviderMap){ finalProviderClientRecordpr=mProviderMap.get(name); if(pr!=null){ returnpr.mProvider; } returnnull; } } ...... privatefinalIContentProvidergetProvider(Contextcontext,Stringname){ IContentProviderexisting=getExistingProvider(context,name); if(existing!=null){ returnexisting; } IActivityManager.ContentProviderHolderholder=null; try{ holder=ActivityManagerNative.getDefault().getContentProvider( getApplicationThread(),name); }catch(RemoteExceptionex){ } IContentProviderprov=installProvider(context,holder.provider, holder.info,true); ...... returnprov; } ...... } 这个函数首先会通过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文件中: publicfinalclassActivityManagerServiceextendsActivityManagerNative implementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback{ ...... publicfinalContentProviderHoldergetContentProvider( IApplicationThreadcaller,Stringname){ ...... returngetContentProviderImpl(caller,name); } ...... } 它调用getContentProviderImpl函数来进一步执行操作。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/966982,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册