Android是一个基于Linux实现的操作系统。但对于Linux内核来说,Android也仅仅只是一个运行在内核之上的应用程序,与其他运行在内核之上的应用程序没有任何区别。所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。
一、Framework启动分析
Framework运行的第一个Java虚拟机进程为zygote(对应具体程序为app_process,该程序位于system/bin目录下),zygote是APK应用程序的父进程,此后所有的虚拟机进程都由zygote创建。
zygote有两个功能:
接受请求创建新的Dalvik进程
共享类和资源(需要加载的资源在preload-classes文本文件中声明)

对于Android来说,每一个应用程序对应着一个Linux 进程,每一个进程都是一个Dalvik虚拟机,Dalvik虚拟机是一种类似Java虚拟机的实现。
zygote进程在启动时会预先装载共享类和共享资源,这些类及资源实际上就是SDK中定义的大部分类和资源。当zygote进程创建新进程时,新的APK进程只需装载自身类和资源即可。共享的资源位于同一段物理内存空间中,zygote进程及其创建的Dalvik进程都可以访问,这就解决了多个APK共享Framework资源的问题。(更多关于资源的讨论请看Android资源加载机制
本文详细解析了Android Framework的启动过程,从zygote进程的启动到Dalvik(ART)虚拟机的作用,再到系统服务如ActivityManagerService的管理。此外,还探讨了应用程序的启动流程,包括ActivityThread的main()方法、UI线程、消息队列以及关键类的作用,如WindowManagerService和ActivityManagerService。
订阅专栏 解锁全文
505

被折叠的 条评论
为什么被折叠?



