1.Zygote启动SystemServer进程 在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示. frameworks/base/core/java/com/android/internal/os/ZygoteInit.java private static boolean startSystemServer(String abiList, String socketName) throws Meth…
此前的文章我们学习了init进程.Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前三篇文章的内容来讲解Android系统启动流程.建议读这篇文章前要通读本系列的前三篇文章,否则你可能不会理解我在讲什么. 1.Launcher概述 Android系统启动的最后一步是启动一个Home应用程序,这个应用程序用来显示系统中已经安装的应用程序,这个Home应用程序就叫做Launcher.应用程…
整体流程大致如下:     1.init简介 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等.init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init.本文将基于Android7.0源码来分析Init进程. 2.引入init进程 说到init进程,首先要提到Android系统启动流程的前几步: 1.启动电源以及系统启动 当电源按下时引导芯片代码开始从预定义的地方…
1.Zygote简介 在Android系统中,DVM(Dalvik虚拟机).应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器.它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM的实例拷贝. 关于init启动zygote我们在上一篇文章已经提到了,这里就不赘述了,这篇文…
简述 Android设备启动过程中,先是Linux内核加载完,接着Android中的第一个进程init启动,它会启动一些需要开机启动的进程. Zygote就是进程init启动起来的.Android中所有应用程序进程,以及运行系统关键服务的System进程都是由Zygote创建的.它通过复制自身的形式创建其它进程.Zygote在启动时会在内部创建一个虚拟机实例,因此,通过复制Zygote得到的其它应用程序进程和System进程都可以快速地在内部获得一个虚拟机地拷贝.Zygote启动完成后就立即将S…
在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,而不是应用程序启动过程.关于应用程序启动过程,我会在后续系列的文章中讲到. 1.应用程序进程概述 要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经被启动.ActivityManagerService在启动应用程序时会检查这个应用程序需要的应用程序进程是否存在,不存在就会请求Zygote进…
前言 对于一个Android应用层开发者来说,了解Android系统的启动流程对理解Android系统有很大的帮助.这其中包含了大量的细节,而且前面很多步骤包含了C/C++实现的native层逻辑,作为一个应用层的开发者来说,很难也没必要掌握得太深入.本文简单整理了Android系统的启动流程,对具体细节感兴趣的朋友可以自行深入研究. Android系统启动流程 Android系统的启动流程,从按power按键启动电源开始,到Launcher应用程序启动完成结束,这里大致可以分为如下7个步骤.…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信 机制:这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程创建过程中是如何实现这两个特点的. Android应用程序框架层创建的应用程序进程…
前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环. 1.Binder线程池启动过程 我们首先来看RuntimeInit类的zygoteInit函数,如下所示 frameworks/base/core/java/com/android/internal/os/RuntimeInit.java 注释1处会在新创建的应用程序进程中创建Binder线程池 2.消息循环创建过程 f…
我们通常使用Busybox来构建根文件系统的必要的应用程序.Busybox通过传入的参数来决定执行何种操作.当init进程启动时,实际上调用的是Busybox的init_main()函数,下面我们来分析这个函数,看init进程究竟是怎样一个流程.我分析的Busybox源码是1.7.0版本的,其他版本会略有不同.部分代码省略我们只看关键性代码. 首先看init_main函数 [cpp] view plain? 01.int init_main(int argc, char **argv); 02.…