Android中Service的启动流程

本文详细介绍了Android中Service的启动过程,从Activity调用startService开始,深入探讨了Binder通信机制的作用,以及Zygote进程如何启动新的进程并执行ActivityThread.main函数。最终,通过一系列的调度和通信,创建了Service实例并调用了其onCreate方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity中通过调用父类的startService()方法,其实调用的是ContextImpl的startService()方法。

ContextImpl.startService()通过ActivityManagerNative获取一个ActivityManagerService的代理对象,这个代理对象通过Binder驱动,调用到ActivityMangerService的startService方法,此startService方法判断进程是否已创建,如果以创建,则调用realStartService方法。若没创建,这通过Process.start函数,使用socket同Zygote进程通信。

Zygote进程复制出一个新的进程,并吧ActivityThread.main作为进程的入口。ActivityThread.main函数中 创建一个ActivityThread实例,调用此实例的attach()方法,

attach方法通过ActivityManagerService的代理对象,通过Binder通信,调用ActivityManagerService的attach方法。此方法调用realStartService(),此方法又通过appThread实例,通过Binder通信,调用ActivityThread实例的scheduleCreateService(),此方法通过向ActivityThread中的消息队列发送消息,通过主线程调用handleCreateService(),创建Service实例,调用onCreate().




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值