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

欢迎关注我的微信公众号:安卓圈

posted @ 2018-12-25 20:55  嘉禾世兴  阅读(673)  评论(0编辑  收藏  举报