*Service启动过程*

第一步:ContextImpl到ActivityManagerService的调用过程

Service的启动、绑定过程_Service的绑定过程

第二步:ActivityThread启动Service

Service的启动、绑定过程_跨进程通信_02

1)ProcessRecord主要用来描述运行的应用程序进程的信息

2)LoadedApk是一个APK文件的描述类

 

*Service绑定过程*

第一步:ContextImpl到AMS的调用过程

Service的启动、绑定过程_Android进阶解密_03

第二步:Service的绑定过程

Service的启动、绑定过程_Android进阶解密_04

1)几个与Service相关的对象类型

  * ServiceRecord  用于描述一个Service

  * ProcessRecord  一个进程的信息

  * ConnectionRecord  用于描述应用程序进程和Service建立的一次通信

  * AppBindRecord  应用程序进程通过Intent绑定Service时,会通过AppBindRecord来维护Service与应用程序进程之间的关联。其内部存储了谁绑定的Service(ProcessRecord)、谁绑定的Service(AppBindRecord)、绑定Service的Intent(IntentBindRecord)和所有绑定通信记录的信息(ArraySet<ConnectionRecord>)

  * IntentRecord  用于描述绑定Service的Intent

2)bindService方法内部会启动Service

3)ServiceDispatcher是LoadedApk的内部类,InnerConnection的connected方法内部会调用H的post方法向主线程发送消息,并且解决当前应用程序进程和Service跨进程通信的问题

Service的启动、绑定过程_Service的绑定过程_05

1)IServiceConnection,它是ServiceConnection在本地的代理,用于解决当前应用程序进程和Service跨进程通信的问题,具体实现为ServiceDispatcher.InnerConnection