38.Activity启动流程

2020-08-06  本文已影响0人  SlideException
image.png
image.png

/**

Android系统启动过程
从开机启动到home launcher:
1.启动bootloader
2.加载系统内核
3.启动init进程
4.启动Zygote进程
5.启动Runtime进程
6.启动本地服务(SystemService)
7.启动HomeLauncher

启动bootloader
加载系统内核
[https://www.nowcoder.com/discuss/220281?type=2]

启动init进程
当系统内核加载完成后,会首先启动init守护进程,它是内核启动的第一个用户进程,进程号总是1,init进程启动完成之后还负责启动一些其他的重要守护进程,包括:
Usbd进程 usb daemon:usb连接后台进程,负责管理usb连接。
adbd进程 android debug bridge daemon:adb连接后台进程,负责管理adb连接。
debuggerd进程 debugger daemon:调试器后台进程,负责管理调试请求及调试流程。
rild进程 radio interface layer daemon:无限接口层后台进程,负责管理无线通信服务。

启动zygote进程
init进程和一些重要的守护进程启动完成后,系统启动Zygote进程,

*/

https://blog.csdn.net/myth13141314/article/details/82595529
startActivity 调用startActivityForResult,

Activity、ActivityThread、ApplicationThread、ActivityManagerService。
ActivityManagerService做好自己的事儿以后,就会调用我们传过去的Binder对象ApplicationThread的scheduleLaunchActivity来将进程切换到当前应用的进程
由于ApplicationThread是一个Binder,所以scheduleLaunchActivity是运行在Binder线程池中的,需要通过Handler将线程切换到ActivityThread的线程中去

Activity里可以找到ActivityThread和H,ActivityThread的内部类ApplicationThread 就是个Binder,用于和ActivityManagerService的进程间通信.供后面从ActivityManagerService的进程回调到应用的进程
ActivityManagerService是系统的一个服务,用于管理Activity的状态和相关信息,比如任务栈等.

ActivityThread是启动Activity的处理者,也是一个中间人的角色,通过调用其他几个类完成启动Activity的任务。它首先通过Binder机制调用ActivityManagerService完成Activity相关的系统级的操作,比如任务栈,暂停其他Activity等,然后通过内部的Binder类ApplicationThread接收ActivityManagerService的进程间请求,将启动的操作重新转回到当前应用进程。接着通过调用Instrumentation和LoadApk的相关方法完成加载Activity类和Application的任务。最后调用Activity的attach方法完成一系列的绑定操作。

上一篇下一篇

猜你喜欢

热点阅读