相关资料:
Android面试必问:AMS、WMS核心原理全解析_哔哩哔哩_bilibili
1、 Android系统整体启动流程简析
system_server(大儿子,zygote进程fork出的第一个进程):系统服务 AMS WMS PKMS(包管理)
2、zygote的启动流程
小问题:进程与虚拟机的关系?
每个进程中都包含有一个虚拟机。虚拟机是进程启动的一个运行时环境。
androidRuntime:Android运行时
class AppRuntime : public AndroidRuntime 【app_main.cpp】 -->
AppRuntime runtime【app_main.cpp】 -->
runtime.start("com.android.internal.os.ZygoteInit", args, zygote); 【启动Android运行时】 【app_main.cpp】 -->
int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)【AnroidRuntime.cpp】
进程是分配内存的最小单位。进程的内存是私有的。
虚拟机是用来管理内存的。刚好和进程配套使用,可谓天作之合。
jmethodID startMeth = env->GetStaticMethodID(startClass, "main", "([Ljava/lang/String;)V");
env->CallStaticVoidMethod(startClass, startMeth, strArray); --> 调用了ZygoteInit.main()方法;
该方法使用的jni的调用方式,标志着代码从native层进入到Java层。
接下来就进入到Java层的ZygoteInit.java的main方法。