Launcher请求AMS过程
点击桌面应用图标startActivitySafely,为启动Activity添加一个新的任务栈,调用startActivity,startActivity又调用startActivityForResult,startActivityForResult会调用Instrumentation execStartActivity,execStartActivity拿到AMS代理对象IActivtiyManager调用AMS startActivity.
AMS到ApplicationThread
AMS startActivity会调用startActivityAsUser,检查调用者权限,启动理由等。经过ActivityStarter,最后调用到ActivityStackSupervisor startSpecificActivityLocked,这个方法会判断activity所在进程是否存在,如果存在调用realStartActivityLocked,如果不存在通过zygote fork一个进程。realstartActivityLocked调用ActivityThread scheduleLaunchActivity。
ActivityThread启动activtiy
ActivityThread scheduleLauncherActivity通过mH发送Launch_activity消息,收到H发送的消息后调用handleLaunchActivtiy,调动performLaunchActivity创建activity并启动。
zygote创建进程过程
zygote会开启一个死循环去等待AMS请求,AMS请求后,处理完,会抛出一个异常,catch到这个异常后,反射调用ActivtiyThread main方法。
网友评论