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