Android Application Framework Outside, Service Understanding : 1

这是一篇旧文了,写于二零一零年七月至九月期间。当时我正在OPPO,完了电纸书项目,刚刚转入公司战略级项目,受命专职钻研Android Framework。本文即为当时的工作成果,曾以此为蓝本,组织了内部培训。本文成文后半月,我因不可抗拒原因,离开了OPPO,对Framework的研究中断,遂失去了一次专心研究Android的良机,深感痛惜。今日我把它晒出来,一来是温故旧知,二来帮助他人,但受限于既有知识,对Android的理解依旧是囫囵吞枣,文中谬误之处再所难免,恳请读者指正。

Contents

  1. Forward
  2. Android Startup
  3. Service Overview
    1. Application Service
    2. Android Service
    3. Native Service
    4. System (Linux) Service
  4. Manage Service
    1. Manage Android Service
    2. Behind ServiceManager Class
    3. Manage Native Service
    4. Behind defaultServiceManager
  5. Inter Process Communication
    1. From Java to Native
    2. What’s BpBinder
    3. What’s BBinder

Forword

从2007年11月5日Google首次发布Android以来,这个绿色机器人 Open Source、体系架构卓越、应用开发便捷等亮点日益引起业界的浓厚兴趣,到目前为止陆续发布了1.1、1.5、1.6、2.0、2.1和2.2等版本,日趋完善的进取势头带动了移动互联网一股新的热潮。

Android

文档名 Android Framework Outside,原本是打算用Inside,但是由于Framework内容繁复,如果用Inside,未免显得自负,况且我也无法做到了如指掌、洞若观火,因此取名Outside,表示这只是一知半解。

由于无法在短时间内面面俱到,目前优先选择其中的Service部分进行学习,整理成Service Understanding。但尽管Service只是Framework中一个组成部分,仍旧体积庞大,对其内容继续筛选后,选择WindowManagerService和ActivityManagerService进行重点研究。

路漫漫其修远,吾当上下求索,我将当前个人理解整理成文,一来承前启后,二来分享所知。但囿于个人能力,对其理解也是管中窥豹,所言所述,并非真理,差错之处,在所难免,欢迎指正,与我联系发E-Mail至PoemCode@Gmail.com,或访问www.PoemCode.net留言。

学习过程中,网络给了我非常大的帮助,非常感谢乐于分享的Androider,他们当中有:

  1. http://xy0811.spaces.live.com
  2. http://blog.csdn.net/maxleng
  3. http://hi.baidu.com/albertchen521
  4. http://www.limodev.cn/blog

Android Startup

我生从何来,死往何处?我为何要出现在这个世界上?我的出现对这个世界来说意味着什么?是世界选择了我,还是我选择了世界?
–《武林外传》

生命从孕育到诞生,经过成长,开枝散叶,终了油尽灯枯。生命如此,万物亦如此?我们往往着眼当下,无知过往和未来,以为看得明明白白,不料这只是生命期(lifetime)中一个片段。

如果我们以生命期(lifetime)来看一段代码,那么其被加入到内存那一刻,应该被视为孕育,内存被释放的那一瞬间则是其终结。同样的眼光来看一个OS,从上电开始,各类代码被执行,创建形形色色的进程,到系统接到关机指令,杀死所有,断电为止,这一个过程就是其生命期(lifetime),Windows如此,Android如此,我想Matrix 也如此。每一次开、关机都是其生命期(lifteime)的重复。

本章节内容将围绕Android的生命期(lifetime)中的一个片段:从我们按下电源键到解锁后看到桌面。本章节为接下来要讲述的Service和Service Manager做前期的预备知识。

Android Startup

图表1 Android Startup

图表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随即启动。

Leave a comment

Your comment