



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android 核心分析( 21 ) -Android 应用框架之AndroidApplicationAndroid ApplicationAndroid 提供给开发程序员的概念空间中Application 只是一个松散的表征概念,没有多少实质上的表征。在Android 实际空间中看不到实际意义上的应用程序的概念,即使有一个叫Application 的类,这个也就是个应用程序上下文状态,是一个极度弱化的概念。Application只是一个空间范畴的概念,Application 就是Activity,Service 之类的组件上下文描述。Application 并不是Android 的核心概念,而Activity 才是Android 的核心概念。从Android 的SDK 文档中,我们知道一般情况Android 应用程序是由以下四种组件构造而成的:Activity,Broadcast Intent Receiver,服务(Service),内容提供器(Content Provider)。我们可以使用下面的图来表示一下Android 的概念空间。这些组件依附于应用程序中,应用程序并不会一开始就建立起来,而是在这些组件建立起来后,需要运行时,才开始建立应用程序对象。2.1 应用进程名称为什么要从应用进程名称开始?作为内核研究,我们还是回到问题的最本质处:不管Activity,Service 等组件如何设计和运行,它要提供服务,就必须要依附在Linux 的进程上,建立消息循环,组件才能够真正的运作。Activity 实例是如何Hosting 在Linux 进程上的?这个是我们首先想要弄明白的。我们在的项目中看到android:process=string这个定义。allowClearUserData=true | falseandroid:allowTaskReparenting=true | falseandroid:backupAgent=stringandroid:label=string resourceandroid:manageSpaceActivity=stringandroid:name=stringandroid:permission=stringandroid:persistent=true | falseandroid:process=stringandroid:restoreAnyVersion=true | falseandroid:taskAffinity=stringandroid:theme=resource or theme . . .在SDK 用已经描述的很清楚到了。android:processThe name of a process where all components of the application should run. Each component canoverride this default by setting its own process attribute.By default, Android creates a process for an application when the first of its components needs torun. All components then run in that process. The name of the default process matches the packagename set by the element.By setting this attribute to a process name thats shared with another application, you can arrangefor components of both applications to run in the same process but only if the twoapplications also share a user ID and be signed with the same certificate.为什么要提出这么一个定义?android:process 名称。默认状态下,Activity Manager Service 在应用程序的第一个组件需要运行时将会为应用程序建立一个进程,而这个进程的名字就是android:process=”string”所指定,缺省的是应用程序包的名字。该进程一旦建立,后面的该应用的组件都将运行在该进程中,他们绑定的根据就是这个Android:Process 指定的名称,因为在他们都在同一个应用程序包里,也就具有了同样的进程名字,于是他们都托管在了同一进程中。组件将通过ClassLoader 从Package中获取到应用程序的信息。在建立Actvitiy 时, 如果在应用进程端没有应用对象, 系统在该过程中利用makeApplication 建立一个Application 对象,实例化android.app.Application,建立一个应用程序上下文完成例如资源,package 等信息管理。2.2 ActivityThread 运行框架在分析中,我们可以看到真正对应应用进程的不是Application 而是ActivityThread。我们从实际的应用堆栈可以看到:NaiveStart.main()ZygoteInit.mainZygoteInit$MethodAndArgsCall.runMethod.Invokemethod.invokeNativeActivityThread.main()Looper.loop().每个应用程序都以ActivityThread.main()为入口进入到消息循环处理。对于一个进程来讲,我们需要这个闭合的处理框架。ActivitiyThread 是应用程序概念空间的重要概念,他建立了应用进程运行的框架,并提供了一个IActivityThread 接口作为与Activity Manager Service 的通讯接口.通过该接口AMS可以将Activity 的状态变化传递到客户端的Activity 对象。23 ActivitiyThread 的建立为了叙述的方便我将Actvitiy Manager Service 简写成AMS。在AMS 中关于应用程序的概念是ProcessRecord,请求都是从Activity,Service等开始的,在Activity 需要Resume 时,此时如果与Activity 相关的应用进程没有起来,AM 则启动应用进程。AMS 与应用进程的绑定分为两个部分,第一部分就是AM 建立应用进程,第二部分就是应用进程Attach 到AM,与AM 建立通讯通道。1 ) 创建建立进程: startProcessLocked(processName,Appinfo.uid) 。该函数在StartSecificActivityLocked 等调用。(1)建立ProcessRecord 对象app, 并将该对象添加到mProcessNames 中。应用对象在mProcessNames 中使用应用名字和uid 来标识自己。如果在同一个Package 中的Activity,如果都使用默认设置,那么这些Activity 都会托管在同一个进程中,这是因为他们在带的ApplicationInfo 中的ProcessName 都是一样的。mPidsSelfLocked 数组记录了PID,这个将会在应用进程跑起来后,将自己Attach 到AM 时,根据pid 找到自己的前世:ProcessRecord.2)android.app.ActivityThread 进程启动Android.app.ActivityThread 进程建立后,将跳入到ActivityThread 的main 函数开始运行,进入消息循环。应用进程使用thread.attach() 发起AMS 的AttachApplicationLocked 调用, 并传递ActvitiyThread 对象和CallingPid 。AttachApplicationLocked 将根据CallingPid 在mPidsSelfLocked 找到对应的ProcessRecord 实例app,将ActvitiyThread 放置app.thread 中。这样应用进程和AM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加氢稳定装置操作工职业考核试卷及答案
- 感光材料乳剂熔化工上岗考核试卷及答案
- 环氧乙烷(乙二醇)装置操作工三级安全教育(班组级)考核试卷及答案
- 信息科学技术试题及答案
- 应用会计面试题及答案解析
- 银行信贷测试面试题及答案解析
- 保密专业试题及答案
- 小学语文人教部编版六年级下册《石灰吟》课件
- 畜牧考研专业试题及答案
- 测绘专业试题及答案
- GB/T 44666-2024指矫形器
- 保洁员职业技能鉴定考试题库及答案
- 商业银行数据要素价值洞察研究白皮书2023
- (高级)航空油料特设维修员理论考试题库(浓缩500题)
- 2024年典型事故案例警示教育手册15例
- DL∕T 853-2015 带电作业用绝缘垫
- DL5000-火力发电厂设计技术规程
- 2024-2030年中国边境经济合作区行业市场发展分析及经验案例与投资趋势研究报告
- 大决战电影赏析课件
- 中药郁金课件
- 爆破飞石控制措施
评论
0/150
提交评论