vm本身是一个class,在进程创建的时候创建的vm对象,用于c/c++对接java,Android 基于linux<sendboxed>的概念,每个进程都是一个盒子.两个盒子之间不能直接存取.因此,为了确保App的沙盒效果,(每个进程都是一个盒子).
每个进程都需要一个主线程来处理ui,所以每个主线程都有一个MQ,来处理Ui和其他的线程送来的Message.主线程闲下来后,就不停的执行looper,不断访问MQ.
一个App的创建过程
在App进程创建之前,会有系统进程,其中包kInit进程,Zygote进程,ServiceManager和SystemServer等,其中ServiceManager中的AndroidService是用java写的;
Linux启动后把硬件驱动都挂机来,准备就绪就,cpu的控制权会转移到init进程,此进程开启时,会先读取配置文档,并依据配置文档(Init.rc脚本)来创建ServiceManager和Zygote
最后由Zygote创建VM和SystemServer进程,,当AMS(ActivityManagerService)启动一个app的时候,就通过Socket请求Zygote来fork一个进程,给这个即将要启动的app.