1. Lanuncher桌面进程Binder客户端线程向system _server进程发送startActivity调用请求
  2. system_server进程中Binder服务端线程向zygote进程发送创建进程请求
  3. zygote进程fork出app进程
  4. app进程默认主线程调用activityThread类的main静态入口方法执行初始化。创建looper并绑定到主线程,创建activityThread对象实例,对象初始化里创建applicationThread线程(binder服务端)、ActivityManagerProxy线程(binder客户端)和mainHandler。
  5. system_server进程在收到attachApplication的请求,进行一些准备工作后,再通过binder IPC向App进程发送handleBindApplication请求(初始化Application并调用onCreate方法)和scheduleLaunchActivity请求(创建启动Activity)
  6. system_server进程向app进程发送scheduleLaunchActivity请求
  7. App进程的binder服务端线程(ApplicationThread)在收到请求后,通过handler向主线程发送BIND_APPLICATION和LAUNCH_ACTIVITY消息
  8. 这里主线程会执行到looper.loop方法进入消息循环
  9. 主线程在收到Message后,创建Application对象并调用onCreate方法,再通过反射机制加载Activity类,并实例化Activity对象,调用Activity.attach()方法为Activity对象创建Window对象,绑定WindowManager,Fragment等
  10. 调用Activity.performCreate方法,performCreate方法调用onCreate
  11. 到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐