Service的绑定过程

时间:2023-03-10 01:26:19
Service的绑定过程

--摘自《Android进阶解密》

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

Service的绑定过程

第二步:Service的绑定过程

Service的绑定过程

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的绑定过程

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