当用户点击桌面图标启动应用时,整个流程在Android系统三大核心服务——AMS(ActivityManagerService)、PMS(PackageManagerService)和WMS(WindowManagerService)的精密协同下展开。
阶段一:决策与校验(AMS主导,PMS协助)
首先,Launcher通过Binder机制向AMS发起startActivity()请求,标志着启动流程的开始。AMS接收到请求后,立即调用PMS的resolveIntent()方法,根据Intent中的action、category和data等信息,在其维护的应用数据库中查找并确定目标Activity的具体位置(即包名与类名),同时执行checkPermission()进行权限校验,确保Launcher有权启动该应用,从而保障系统的安全性与隔离性。
阶段二:进程创建与初始化(AMS主导)
完成解析与权限检查后,AMS继续决策任务栈(Task)的归属,并判断目标应用进程是否已存在;若不存在,AMS将通过ProcessList向Zygote进程发出创建新进程的指令,利用Zygote预加载的系统类和资源,通过forkAndSpecialize()快速派生出新的应用进程。新进程启动后,其入口ActivityThread.main()被调用,主线程的Looper和Handler机制被初始化,构建起应用运行的基本环境。随后,ActivityThread.attach()被调用,通过Binder与AMS建立连接,并注册一个ApplicationThread代理,使AMS能够跨进程控制该应用。
阶段三:界面创建与显示(应用进程与WMS协同)
AMS确认新进程就绪后,便通过这个Binder通道,调用scheduleLaunchActivity(),将之前保存的Activity启动参数传递给应用进程。应用进程的主线程接收到指令后,借助Instrumentation框架创建目标Activity实例,并依次回调onCreate()、onStart()和onResume()等生命周期方法。在onCreate()中,开发者调用setContentView()加载布局资源,构建应用的视图树(View Tree),但此时视图尚未显示。当Activity进入onResume()阶段,界面准备就绪,应用进程便通过WindowManager的全局实例,调用addView(),最终触发与WMS的跨进程通信WMS.addWindow()。
WMS接收到请求后,为该Activity创建一个WindowState对象来管理其窗口状态,并根据

最低0.47元/天 解锁文章
963

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



