Android系统启动分析(三)

本节是本系列文章的第三篇,将分析System_Server进程的启动过程和Launcher的启动过程。

第一篇文章:Android系统启动分析(一)


第二篇文章:Android系统启动分析(二)

本节涉及到的文件有:

文件 路径
ZygoteInit.java frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
ZygoteServer.java frameworks/base/core/java/com/android/internal/os/ZygoteServer.java
AndroidRuntime.cpp frameworks/base/core/jni/AndroidRuntime.cpp
app_main.cpp frameworks/base/cmds/app_process/app_main.cpp
RuntimeInit.cpp frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
SystemServer.java frameworks/base/core/java/com/android/server/SystemServer.java
SystemServiceManager.java frameworks/base/services/core/java/com/android/server/SystemServiceManager.java

阅读更多

Android系统启动分析(二)

本节是本系列文章的第二篇,将分析Zygote进程的启动过程。

第一篇文章:Android系统启动分析(一)


第三篇文章:Android系统启动分析(三)

二、Zygote进程启动

上节分析了Init进程的启动流程。本节将进入到framework层,分析Zygote进程的启动流程。

本节涉及到的文件有:

文件 路径
app_main.cpp framework/cmds/app_process/app_main.cpp
AndroidRuntime.cpp frameworks/base/core/jni/AndroidRuntime.cpp
ZygoteInit.java frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
ZygoteServer.java frameworks/base/core/java/com/android/internal/os/ZygoteServer.java

2.1 app_main.main()

大家都知道Zygote进程相当于是Android的根进程,后面所有进程都是该进程fork出来的,而Zygote进程则是由Init进程fork而来。先看看Zygote进程是如何启动的。
进入到app_main的main()函数

阅读更多

Android系统启动分析(一)

本文的分析基于Android 8.1源码。

Android系统启动与应用程序的启动流程、四大组件原理、AMS、ClassLoader等息息相关,因此了解Android系统启动流程对深入理解Android有很大的帮助。

本文将分为以下几个小节讲述Android系统的系统流程,分别是:init进程启动、Zygote进程启动、SystemServer进程启动以及Launcher进程启动。

一、init进程启动

  都知道当手机关机时不会启动任何一个进程,所以在init进程启动前,Android就为进程的启动做了很多铺垫。具体为:按下电源键加载BootLoader、拉起系统OS、启动Linux内核…但由于本人暂未学到Linux内核,因此前面的暂不做分析(当我没说emmm…)

本节涉及到的文件有:

文件 路径
init.cpp system/core/init/init.cpp
init.rc system/core/rootdir/init.rc
init.zygote64_32.rc system/core/rootdir/init.zygote64_32.rc
service.cpp system/core/init/service.cpp
builtins.cpp system/core/init/builtins.cpp

阅读更多

Android Framework之Activity启动流程(三)

各位看官好,本文是Android Framework之Activity启动流程的第三篇,本篇将分析Activity生命周期的回调,新世界的大门就在眼前,走起。

第一篇:Android Framework之Activity启动流程(一)
第二篇:Android Framework之Activity启动流程(二)

执行完 ApplicationThread# handleBindApplication () 之后,这时候新进程已经启动。
回到AMS# attachApplicationLocked(),代码逻辑来到了上篇文章的注释5处,调用了ActivityStackSupervisor# attachApplicationLocked,在里面又执行了realStartActivityLocked(),这样就回到了第一篇末尾所说到的第二种情况,接下来分析第二种情况。

阅读更多