1、启动入口

2、Instrumentation对象
3、ActivityManager

4、通过ServiceManager获得ActivityManagerService(AMS)
、
5、AMS中的startActivity

6、ActivityStarter

7、ActivityStackSupervisor

8、LocalServices


9、启动组件的关键步骤检查启动的类是否存在,这个是由PackManagerService管理的,生成过程请看大神的文章
https://www.jianshu.com/p/adaa1a39a274
在这个服务生成后会注册一些本地服务,在LocalSeervices.getSerVice中看出是从Map中拿出服务,那么在PMS搜索
PackageManagerInternal关键字,找到其真正实现类

10、PackageManagerInternalImpl中的resolveIntent方法

11、queryIntentActivitiesInternal

12、getInstantAppPackageName,获取包名的剩下的就比较简单了

13、接下来看下
final String pkgName = intent.getPackage(); ComponentName comp = intent.getComponent();
这两行代码,我们在初始化intent的时候显示启动的有





由此可见一般不为空,在LauncherActivity中

通过上图的Intent intent = new Intent(mIntent);

14、接下来


16、获取ActivityInfo信息

17、检查完毕后


18、继续



19、初始化要启动的类


本文详细剖析了Android应用从启动入口到组件初始化的关键步骤。涵盖了Instrumentation对象、ActivityManager及ServiceManager的作用,深入探讨了ActivityStarter、ActivityStackSupervisor等核心组件的工作原理,并解析了PackageManagerService在启动过程中的角色,包括类检查、Intent解析和ActivityInfo获取。
9664

被折叠的 条评论
为什么被折叠?



