作品分享
问答交流
发现
任务
客服工单
Android Activity创建到View的表现过程 Android 四大组件通讯焦点 Android 体系启动到App 界面完全展示终于明白(图文版)
Android 体系启动流程概览 ServiceManager 历程作用 Zygote 历程创建与fork子历程 system_server 历程作用 App 与 system_server 交互 Activity 与 View的展示 全流程图
init 是用户空间的第一个历程,它的父历程是idle历程 init 历程通过解析init.rc 文件并fork出相应的历程 zygote是第一个Java 假造机历程,通过它孵化出system_server 历程 system_server 历程启动桌面(Launcher)App
init、servicemanger、zygote、system_server
App2 向ServiceManager注册服务,过程为:App2 获取ServiceManager的Binder引用,通过该Binder引用将App2 的Binder对象(实现了接口)添加到Binder驱动,Binder驱动纪录对象与天生handle并返回给ServiceManager,ServiceManager纪录关键信息(如服务名,handle)。 App1 向ServcieManager查询服务,过程为: App1 获取ServiceManager的Binder引用,通过该Binder引用发送查询下令给Binder驱动,Binder驱动委托ServiceManager举行查询,ServiceManager根据服务名从自己的缓存链表里查出对应服务,并将该服务的handle写入驱动,进而转为App1的Binder署理。 App1 拿到App2 的Binder署理后,App1 就可以通过Binder与App2举行IPC通讯了,此时ServiceManager已经默默退居幕后,深藏功与名。
构造AppRuntime对象,并创建Java假造机、注册一系列的jni函数(Java和Native层关联起来) 从Native层切换到Java层,实行ZygoteInit.java main()函数 fork system_server历程,预加载历程公共资源(后续fork的子历程可以复用,加速历程实行速率) 末了开启LocalSocket,并循环监听来自system_server创建子历程的Socket哀求。
Zygote fork system_server 历程并等待Socket哀求 system_server 历程启动后会哀求打开Launcher(桌面),此时通过Socket发送创建哀求给Zygote,Zygote 收到哀求后负责fork 出Launcher历程并实行它的入口函数 Launcher 启动后用户就可以看到初始的界面了
Launcher App 收到点击哀求,会实行startActivity,这个下令会通过Binder通报给system_server历程里的AMS(ActivityManagerService)模块 AMS 发现对应的微信历程并没有启动,于是通过Socket发送创建微信历程的哀求给Zygote Zygote 收到Socket哀求后,fork 微信历程并实行对应的入口函数,之后就会表现出微信的界面了
举报
Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )
GMT+8, 2025-6-9 23:18, Processed in 0.145903 second(s), 35 queries.© 2003-2025 cbk Team.