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)
标签:系统启动,启动,Launcher,流程,activity,进程,AMS From: https://www.cnblogs.com/Sharley/p/17687890.html