Launcher是Android所有应用的入口,用来显示系统中已经安装的应用程序图标。
Launcher本身也是一个App,一个提供桌面显示的App,但它与普通App有如下不同:
-
Launcher是所有应用的入口,可以管理应用
-
Launcher是在Android系统启动后就要显示给用户的应用
-
Launcher是顶部App,即任何应用返回后都是到Launcher,不能再继续返回
Launcher启动的入口是AMS的systemReady方法。
备注:本文是结合Android8.0的源码看Android系统Launcher在开机时的启动过程
1. startBootstrapServices启动AMS
从前面的《从源码角度看Android系统SystemServer进程启动过程》一文中可知:在SystemServer的startBootstrapServices方法中已经启动ActivityManagerService
代码路径:frameworks/base/services/java/com/android/server/SystemServer.java
深入到startBootstrapServices函数中:
private void startBootstrapServices() {
...省略...
//启动服务ActivityManagerService
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.setInstaller(installer);
...省略...
}
2. startOtherServices中调用AMS的systemReady方法
然后又在SystemServer的startOtherServices方法中调用了AMS的systemReady方法
代码路径:frameworks/base/services/java/com/android/server/SystemServer.java
深入到startOtherServices函数中:
private void startOtherServices() {
...省略...
//调用ActivityManagerService的systemReady
mActivityManagerService.systemReady(() -> {
Slog.i(TAG, "Making services ready");
traceBeginAndSlog("StartActivityManagerReadyPhase");
mSystemServiceManager.startBootPhase(
SystemService.PHASE_ACTIVITY_MANAGER_READY);
...省略...
}
3. AMS的systemReady方法
代码路径:frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
深入到systemReady函数中:
public void systemReady(final Runnable goingCallback, BootTimingsTraceLog traceLog) {
traceLog.traceBegin("PhaseActivityManagerReady"