Service的启动、绑定过程
--摘自《Android进阶解密》
*Service启动过程*
第一步:ContextImpl到ActivityManagerService的调用过程
第二步:ActivityThread启动Service
1)ProcessRecord主要用来描述运行的应用程序进程的信息
2)LoadedApk是一个APK文件的描述类
*Service绑定过程*
第一步:ContextImpl到AMS的调用过程
第二步: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跨进程通信的问题
1)IServiceConnection,它是ServiceConnection在本地的代理,用于解决当前应用程序进程和Service跨进程通信的问题,具体实现为ServiceDispatcher.InnerConnection
欢迎关注我的微信公众号:安卓圈