本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
Launcher -> AMS
activity -> instrumentation -> AMS
AMS处理
Launcher应用启动新的应用
1、 启动activity,通过Binder机制,调用AMS启动新的Activity
2、 AMS会先回调Launcher(通过ActivityStack等跟activity栈有关的类)的ApplicationThread(Binder),然后走ActivityThread的pauseActivity相关的流程,最终调用到 Activity.performPause流程走pause生命周期
3、 走完pause后又回调到AMS的activityPaused方法,接着走ActivityStack的activityPausedLocked,然后是ActivityStackSupervisor,发现应用的进程还没有起来
4、 然后AMS发起创建应用进程的请求startProcess,走到zygote进程fork出新的应用进程,期间一通操作,最后会反射调用ActivityThread的main方法,在里面new一个ActivityThread,初始化Handler和Looper等
5、 在ActivityThread 的main方法里会调用attach方法,在里面会利用Binder通信,调用AMS的attachApplication
6、AMS后面又会调回到ActivityThread的handleBindApplication方法,这里主要是创建LoadedApk和ContextImpl,然后反射创建Instrumentation,接着调用LoadedApk的makeApplication方法,先初始化ClassLoader,然后创建ContextImpl,里面