Android系统启动流程、APP启动流程、activity启动流程

发布时间 2023-09-08 16:19:00作者: Sharley

Android系统启动流程

打开电源时,先启动BootLoader 使用BootLoader加载Linux内核 启动init进程 启动zygote进程 -(zygote调用system_server进程)拉起packageManagerService和AMS(ActivityManagerService) AMS启动Launcher应用。

 

APP启动流程

1,桌面程序点击app图标,会调用桌面程序的onClick方法,调用startActivity方法启动app
2. 启动新app,属于跨进程启动
3. 跨进程通信用到AMS(activity Manager Service),,ActivityManagerNative.getDefault返回ActivityManagerService的远程接口,即ActivityManagerProxy接口,
通过Binder驱动程序,ActivityManagerProxy与AMS服务通信,则实现了跨进程到System进程。AMS响应Launcher进程。在AMS的onTransact方法里面会获取到请求的Activity
4. 处理启动的activity的参数,判断是否需要新建task启动Activity
5. ApplicationThread对象的远程接口,通过调用这个远程接口的schedulePauseActivity,通知launcher进程进入Paused状态,
此时AMS对Launcher的请求已经响应,这时我们又通过Binder通信回调至Launcher进程。
Launcher进程挂起Launcher,再次通知AMS,此时AMS创建新的进程
6. 启动目标进程
创建新进程的时候,AMS会保存一个ProcessRecord信息,如果应用程序中的AndroidManifest.xml配置文件中,我们没有指定Application标签的process属性,系统就会默认使用package的名称。每一个应用程序都有自己的uid,因此,这里uid + process的组合就可以为每一个应用程序创建一个ProcessRecord。
新的进程会导入android.app.ActivityThread类,并且执行它的main函数
7. 绑定新进程
在AMS中注册应用进程,启动启动栈顶页面

此时在App进程,我们可以看到,经过一些列的调用链最终调用至MainActivity:onCreate函数,之后会调用至onResume,而后会通知AMS该MainActivity已经处于resume状态。至此,整个启动流程告一段落。

 

activity启动流程

一般分3个阶段,以activityA中启动activityB为例:

activityA请求Android system service(系统服务),具体指AMS(activity Manager Service)

                  ?

    系统服务收到Activity启动消息,调用ActivityThread创建ActivityB

                  ?

        在应用ActivityThread主线程中,启动ActivityB页面