下面的流程是 API 27,不同的版本之间差异不大,但在细节上有区别。
点击桌面应用图标或自己程序启动Activity过程,由于过程比较长,所以分段来介绍。
从 Activity#startActivity 到切换到 ActivityThread 的过程
这部分比较繁琐切没太大意思,不同的版本走的过程有些差异。
activity01.png
ActivityThread 到调起 onCreate 过程
下面的代码你可以注意到下面几点
- ApplicationThread 实现了 IApplicationThread.Stub
- ActivityThread 是程序的入口,可以看到 main 方法,在 main 中关联 Looper,
- Activity 是通过反射创建的,Instrumentation 这类关系到 Activity 的生命周期,可以通过 hook Instrumentation 实现插件化。
activity02.png
具体的代码就不帖了,自己画一张流程图比简单的贴代码更直观。