Android Framework分析Launcher启动过程

目录

435e36776c5a5998d5db58890992f945.jpeg

前言

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

分析Launcher的启动

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

e1ae5b0ce8927357a49f0896799298a8.jpeg

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

ecb97169f6ba3af0337d8c0e0e99356e.jpeg


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

c564df6cdb1c0733c16a63e4f93a3bef.jpeg

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

4550d40998392ff1e8142839901745ce.jpeg


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

5d7532ebca06382282fada2f21bbacdf.jpeg


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

138c434be9ff475c20078d23918854ab.jpeg


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

0239502cf8ac33366d1125560dfa1132.jpeg


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

0b65bad114824bac3e7d3a526115a7aa.jpeg

46e31d9e088953c159b5cd13e971b0a2.jpeg

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

0b08c6554a2c8b6966fe5878b8c38620.jpeg

image.png


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

be3e24a8a756545093b23b68bf25f302.jpeg


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

61ec1d0fc01ea15caf0f1d50121e448f.jpeg



作者:itfitness
链接:https://www.jianshu.com/p/053241205dcf

关注我获取更多知识或者投稿

a917cfe7c8e30e8a337828b4f262dad0.jpeg

6cffc9140eac047428b9e163359ce99b.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值