Android framework学习指南之Launcher启动

2023-05-05  本文已影响0人  像程序那样去思考

前言

Launcher是一个用来显示系统中已经安装的应用程序的应用程序,Launcher 在启动过程中会请求PackageManagerService 返回系统中已经安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应的应用程序,它的作用主要有两点一个是启动应用程序一个是显示和管理应用程序的快捷图标或者其他桌面组件。

分析Launcher的启动

启动入口在SystemServer.java的startOtherServices函数中,我们可以看到上面的注释的意思也大概是这个

image.png

我们点击到systemReady方法中,在第14282行发现有一个名为startHomeActivityLocked的方法被调用

image.png

我们点到startHomeActivityLocked方法中发现有一个getHomeIntent的调用

image.png

我们点进getHomeIntent方法中,发现假如mFactoryTest不为FactoryTest.FACTORY_TEST_LOW_LEVEL(低级工厂模式)会添加一个Intent.CATEGORY_HOME的Category

image.png

然后我们在ActivityManagerService.java的这一行加入Log打印

image.png

发现打印的包名是com.android.settings并不是launcher

image.png

然后我们在settings中的AndroidManifest.xml中发现了两个带有android.intent.category.HOME标记的Activity

image.png

然后我们在两个Activity中的onCreate方法中加入Log打印

image.png image.png

我们编译运行后发现打印的是FallbackHome

image.png

image.png

我们打开FallbackHome.java,发现代码比较少,其中有一个方法是用来检测是否找到了真正的HomeActivity,我这里加了一行Toast的代码,用来显示真正的HomeActivity的包名

image.png

然后我们编译源码运行模拟器,我们发现显示的是launcher3(ps:由于这里我把默认的launcher改成了launcher3所以这里显示的是launcher3)


image.png
上一篇下一篇

猜你喜欢

热点阅读