--摘自《android插件化开发指南》

一.在新进程启动Service

第一步:APP向AMS发送一个启动Service的消息

通过AMN/AMP把要启动的Service信息发送给AMS

Service工作原理_android插件化开发指南

第二步:AMS创建新的进程

这一步,AMS会检查Service是否在AndroidManifest中申明。AMS检查启动Service的进程是否存在,若不存在,先把Service信息保存下来,然后创建一个新进程。

在AMS中,每个Service,都使用ServiceRecord对象来保存

第三步:新进程启动,通知AMS

这一步会创建新的ActivityThread

第四步:AMS把传进来的ActivityThread对象改造为ATP,通过ATP把要启动的Service信息发送给新进程

第五步:新进程启动Service

Service工作原理_跨进程通信_02

其中第1/3/4步都是跨进程通信,如果是启动统一进程中的Service,则省略掉启动新进程那两步

二.绑定Service

绑定就是把AMS发送的启动消息换为绑定消息,app会收到AMS的两个消息,启动Service和绑定Service,并把一个Binder对象传给AMS

Service工作原理_信息保存_03

Service工作原理_跨进程通信_04

最后,AMS会把Binder对象发送给App,这里用的是AIDL,AIDL的名字是IServiceConnection

 

Service工作原理_android插件化开发指南_05