Launcher即桌面,是Android智能设备的窗口,用户使用最频繁的软件之一。Launhcer是Android所有应用的入口,也提供窗口小部件等功能
当然,Launcher本身就是一个APP,一个提供桌面的APP,我们也可以开发一款Launcher APP作为手机的桌面。Laucher有很多和普通APP不同的地方。
- Launcher是顶部APP,即任何应用返回后都是到Launcher,不能再继续返回;
- Launcher是所有应用的入口,可以管理应用;
- Launcher是Android系统启动后就要显示给用户的应用。
。
我们的手机一开机第一眼看见的就是Launcher,也就是说Launcher在开机的过程中就已经启动完成,下文,我们就来看看。
前面,我们已经讲过了 init进程 –> Zygote进程 –> SystemServer进程的启动流程,
在SystemServer的main方法中,启动了各个服务,其中包括 startOtherServices();
启动的服务有以下:包括我们常见的,AMS、PMS、WMS…
接下来就需要初始化这些服务:
从注释可以了解到,现在所有的服务都已经启动好了,可以告诉ActivityManager已经ok了。可以开始launching系统第一个application了(initial:最开始的,第一个的)。
调用 frameworks /base /services /core /java /com /android /server /am /ActivityManagerService.systemReady() 进行启动任务。
跟进去
mAtmInternal是什么呢?
是 frameworks /base /services /core /java /com /android /server /wm /ActivityTaskManagerInternal.java,发现它是一个抽象类,真正的实现类是在 ==frameworks /base /services /core /java /com /android /server /wm /ActivityTaskManagerService.LocalService ==
mRootActivityContainer就是 frameworks /base /services /core /java /com /android /server /wm /RootActivityContainer.java
跟进去发现,会先调用ActivityTaskManagerService的getHomeIntent(),intent.addCategory(Intent.CATEGORY_HOME); 看到这里熟悉了吗。
然后会调用ActivityTaskManagerService的getActivityStartController()获取 frameworks /base /services /core /java /com /android /server /wm /ActivityStartController对象,调用ActivityStartController的startHomeActivity()方法。
发现其调用的是 frameworks /base /services /core /java /com /android /server /wm /ActivityStackSupervisor 的scheduleResumeTopActivities()方法
发现是通过Handler发送了一个消息进行处理:
调用RootActivityContainer的resumeFocusedStacksTopActivities()方法,
最后再调用 frameworks /base /services /core /java /com /android /server /wm /ActivityStack的 resumeTopActivityUncheckedLocked()方法
里面会调用ActivityStack的resumeTopActivityInnerLocked()方法,
启动Activity的过程是将Activity置为顶层可见,称为resume top Activity。resumeTopActivityInnerLocked方法