安卓运行环境(四)

 

 

Linux系统的启动过程,在该过程的最后,内核将读取initrc文件,由于Android系统相对于Linux内核而言仅仅是一个Linux应用程序而已,因此,安卓的启动也是在init.rc中被声明

 

Linux系统中运行的第一个Dalvik虚拟机程序叫做zygote,接下来的所有Dalvik虚拟机进程都是通过这个“ 卵” 孵化出来的。

 

 zygote进程

 包含两个主要模块

       Socket服务端:该Socket服务端用于接收启动新的Dalvik进程的命令

       Framework共享类及共享资源:zygote进程预先会装载共享类和共享资源,这些类及资源实际上就是SDK中定义的大部分类和资源

  zygote孵化出的第一个Dalvik进程叫做SystemServer

  SystemServer中创建了一个Socket客户端,并有AmS负责管理该客户端,之后所有的Dalvik进程都将通过该Socket客户端间接被启动

  当需要启动新的APK进程时,AmS中会通过该Socket客户端向zygote进程的Socket服务端发送一个启动命令,然后zygote会孵化出新的进程。(使用fo lk 启动新的进程)

 

 从系统架构的角度来讲,就在于此即先创建一个zygote,并加载共享类和资源,然后通过该zygote,去孵化新的Dalvik进程。
 

 dx工具

  $ adb push foo.jar /data/app                                   装载到目录
  $ adb shell dalvikvm -cp /data/app/foo.j ar Foo         运行

 

SystemServer进程

SystemServer进程在Android的运行环境中扮演了 “神经中枢” 的作用,APK应用中能够直接交互的大部分系统服务都在该进程中运行, 常见的比如WindowManagerServer ( Wms ) 、
ActivityManagerSystemService (AmS)、PackageManagerServer (PmS) 等,这些系统服务都是以一个线程的方式存在于SystemServer进程中

AMS启动第一个activity的过程。

其实AMS启动第一个activity就是去activity栈中去读取第一个activity,所以用户可以自动的灵活的进行配置。

如果栈中没有activity系统则系统发出 了一个 catagory 字段包含 CATEGORY—HOME的intent。只要用户自己去响应即可。

如果有多个响应,系统会让用户进行选择。

 

posted on 2015-03-30 10:58  sunfan  阅读(507)  评论(0编辑  收藏  举报