Android Application Framework Outside, Service Understanding : 1
这是一篇旧文了,写于二零一零年七月至九月期间。当时我正在OPPO,完了电纸书项目,刚刚转入公司战略级项目,受命专职钻研Android Framework。本文即为当时的工作成果,曾以此为蓝本,组织了内部培训。本文成文后半月,我因不可抗拒原因,离开了OPPO,对Framework的研究中断,遂失去了一次专心研究Android的良机,深感痛惜。今日我把它晒出来,一来是温故旧知,二来帮助他人,但受限于既有知识,对Android的理解依旧是囫囵吞枣,文中谬误之处再所难免,恳请读者指正。
Contents
- Forward
- Android Startup
- Service Overview
- Application Service
- Android Service
- Native Service
- System (Linux) Service
- Manage Service
- Manage Android Service
- Behind ServiceManager Class
- Manage Native Service
- Behind defaultServiceManager
- Inter Process Communication
- From Java to Native
- What’s BpBinder
- What’s BBinder
Forword
从2007年11月5日Google首次发布Android以来,这个绿色机器人 Open Source、体系架构卓越、应用开发便捷等亮点日益引起业界的浓厚兴趣,到目前为止陆续发布了1.1、1.5、1.6、2.0、2.1和2.2等版本,日趋完善的进取势头带动了移动互联网一股新的热潮。
文档名 Android Framework Outside,原本是打算用Inside,但是由于Framework内容繁复,如果用Inside,未免显得自负,况且我也无法做到了如指掌、洞若观火,因此取名Outside,表示这只是一知半解。
由于无法在短时间内面面俱到,目前优先选择其中的Service部分进行学习,整理成Service Understanding。但尽管Service只是Framework中一个组成部分,仍旧体积庞大,对其内容继续筛选后,选择WindowManagerService和ActivityManagerService进行重点研究。
路漫漫其修远,吾当上下求索,我将当前个人理解整理成文,一来承前启后,二来分享所知。但囿于个人能力,对其理解也是管中窥豹,所言所述,并非真理,差错之处,在所难免,欢迎指正,与我联系发E-Mail至PoemCode@Gmail.com,或访问www.PoemCode.net留言。
学习过程中,网络给了我非常大的帮助,非常感谢乐于分享的Androider,他们当中有:
- http://xy0811.spaces.live.com
- http://blog.csdn.net/maxleng
- http://hi.baidu.com/albertchen521
- http://www.limodev.cn/blog
Android Startup
我生从何来,死往何处?我为何要出现在这个世界上?我的出现对这个世界来说意味着什么?是世界选择了我,还是我选择了世界?
–《武林外传》
生命从孕育到诞生,经过成长,开枝散叶,终了油尽灯枯。生命如此,万物亦如此?我们往往着眼当下,无知过往和未来,以为看得明明白白,不料这只是生命期(lifetime)中一个片段。
如果我们以生命期(lifetime)来看一段代码,那么其被加入到内存那一刻,应该被视为孕育,内存被释放的那一瞬间则是其终结。同样的眼光来看一个OS,从上电开始,各类代码被执行,创建形形色色的进程,到系统接到关机指令,杀死所有,断电为止,这一个过程就是其生命期(lifetime),Windows如此,Android如此,我想Matrix 也如此。每一次开、关机都是其生命期(lifteime)的重复。
本章节内容将围绕Android的生命期(lifetime)中的一个片段:从我们按下电源键到解锁后看到桌面。本章节为接下来要讲述的Service和Service Manager做前期的预备知识。
图表1为采用UML中的活动图(Activity Diagram),展现这段要关注的生命期(lifetime)片段。
在第一个环节,bootloader首先被执行,其有三种模式:normal、recovery和fastboot,至于到底是进入到哪种模式,取决于当时用户的操作,以HTC G1为例,只按下Power键,则进入到normal;Power+Home键,则进入recovery;Power+Camera,则进入fastboot。以下流程假定进入normal模式。
Kernel是由bootloader加载的,为第二个环节,完毕以后,由内核启动init,这是一用户进程,执行内容由init.rc文件决定,此为第三个环节。在第三个环节中,有诸多服务会被创建,也就是后文中所提到的sytem/linux service中,其中有管理各类服务的servicemanager,还有作为java层基石的zygote,等等。
接下来SystemService被启动,负责创建后文所提到的Android/Native Service,其中那个包括管理Activity的ActivityManagerService,负责管理Window的WindowManagerService,负责电源管理的PowerManagerService等。
剩余的事情就是ActivityManagerService发出systemReady的信号,桌面Launcher,第三方随机启动的应用开始执行。
同样WindowManagerService也会发出systemReady信号,LockScreen随即启动。