一张图学习service的启动过程
2019-03-01 本文已影响0人
小怪兽大作战

1.调用context.startService启动目标service,这是一个桥接模式,真正的实现在contextImpl.startService中。
2.跳转到ActivityManagerService.getDefault.startService方法。ActivityManagerService.getDefault是获得ActivityManagerService的代理对象,调用代理对象的接口。这一步是binder,真正的逻辑实现是在AMS中。
3.AMS调用ActivityServices(AMS的服务管理类),ActivityServices与目标进程的ActivityThread通信,ActivityThread向handler发出消息。
4.ActivityThread的handler接收消息,完成以下步骤:(1)通过类加载器加载service实例。(2)为service绑定context,AMS.prox,ApplicationThread等实例。(3)调用service的onCreate方法。(4)将service实例保存到ActivityThread的列表中。(5)调用StratComand方法