Android精选

android 启动过程(一)

2019-01-18  本文已影响31人  裔海01

1、由init.rc调用 app_main.cpp的main方法,启动zygote进程

3、调用AndroidRuntime.cpp 的start方法传递ZygoteInit类路径

5、AndroidRuntime.cpp的start方法主要启动java虚拟机跟注册虚拟机,调用ZygoteInit的main方法

6、ZygoteInit的main方法主要 把zygote进程注册到ZygoteServer 、预加载一些类 、启动SystemServer进程、等待ams请求。

9、通过Zygote.forkSystemServer -->nativeForkSystemServer 方法创建SystemServer进程,得到一个runnable,并运行

14、通过反射SystemServer的main方法传到MethodAndArgsCaller 线程invoke,并返回该线程。

20、runselectLoop 监听fork进程 通过ZygoteConnection.processOneCommand返回MethodAndArgsCaller--> Zygote.forkAndSpecialize()-->handleChildProc-->ZygoteInit.childZygoteInit-->RuntimeInit.findStaticMain

22、SystemServer中的startBootstrapServices()注册一些系统服务通过SystemServiceManager.startService 传递ActivityManagerService的静态内部类Lifecyle 的class,在SystemServiceManager.startService中通过反射构造函数并返回

24、startOtherService 其中windowmanagerService是通过该方法注册的

26、在ams.systemReady方法中有两个地方会运行到ams.startHomeActivityLocked,我目前也不确定这块到底会运行那个,分别是startHomeActivityLocked(currentUserId, "systemReady");和mStackSupervisor.resumeFocusedStackTopActivityLocked(); 

27、根据Intent.CATEGORY_HOME封装Intent对象返回

上一篇 下一篇

猜你喜欢

热点阅读