Android启用应用Service的过程(Lollipop)

本文详细解析了Android系统中Service的启动流程,包括从应用程序请求启动Service到Service真正被创建和启动的所有步骤。重点关注了ActivityManagerService的角色以及跨进程调用的实现方式。

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

App1          -> startService 
     |
     |  binder call
     |
AMS          -> startService 
     |
    --->   ActiveServices -> startServiceLocked 
                                 -> retrieveServiceLocked :  通过intent 和PackageManagerService 获得ServiceRecord
                                 -> bringupServiceLocked:  根据Service的进程是否已经存在(ProcessRecord) 各表一支
                                          -> (1、进程已经存在)realStartServiceLocked
                                                   ->  bumpServiceLocked 这个方法主要是会schedule一个Service启动的Timeout消息
                                                   ->  app.thread.scheduleCreateService ,跨进程进行onCreate方法的异步调用
                                                   ->  sendServiceArgsLocked,跨进行进行onStartCommand方法的异步调用,传入service启动参数
                                           -> (2、进程还不存在)
                                                   ->    先通过AMS启动目标进程, startProcessLocked
                                                       -> Process.start 
                                                       -> startViaZygote
                                                        -> 将ServiceRecord加入到mPendingServices中,等到attachApplication被回调时再行处理


 下面的问题是,目标进程启动后怎么回调到service中的attachApplication方法呢
Zygote启动后,会调用到ActivityThread的main方法
ActivityThread -> main
                        -> attach
                        -> 跨进程调用 AMS.attachApplication, 并传入一个ApplicationThread对象
AMS                   -> attachApplication 方法中会挨个调用ActivityStackSupervisor, ActiveServices等一票对象的attachApplicationLocked方法
ActiveService   -> attachApplicationLocked 被调用到,回到(1、进程已经存在)的调用顺序中
                                   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值