activity启动过程

2020-05-24  本文已影响0人  那个阳光下奔跑的少年

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方法。

上一篇下一篇

猜你喜欢

热点阅读