Service工作过程

Posted 嘉禾世兴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Service工作过程相关的知识,希望对你有一定的参考价值。

Service两种工作状态的作用

1)启动状态:用于执行后台计算

2)绑定状态:用于其他组件和Service的交互

注意:Service这两种状态可以共存,即Service既可以处于启动状态也可以同时处于绑定状态

Service启动过程

ContextWrapper.startService-->

ContextImpl.startService-->

ContextImpl.startServiceCommon-->

ActivityManagerNative.getDefault().startService-->

ActivityManagerService.startService-->

ActiveServices.startServiceLocked-->

ActiveServices.startServiceInnerLocked-->

ActiveServices.bringUpServiceLocked-->

ActiveServices.realStartServiceLocked-->

ApplicationThread.scheduleCreateService-->

(Handler)H.handleMessage-->

ActivityThread.handleCreateService-->

ActivityThread.handleServiceArgs-->

Service.onStartCommand

handleCreateService主要完成几件事:

1)通过类加载器创建Service的实例

2)创建Application对象并调用其onCreate,当然Application的创建过程只会有一次

3)创建ContextImpl对象并通过Service的attach方法建立二者之间的关系,这个过程和Activity实际上是类似的,毕竟Service和Activity都是一个Context

4)调用Service的onCreate方法并将Service对象存储到ActivityThread中的一个列表中

Service绑定过程

ContextWrapper.bindService-->

ContextImpl.bindService-->

ContextImpl.bindServiceCommon-->

ActivityManagerService.bindService-->

ActiveServices.bindServiceLocked-->

ActivityManagerService.bringUpServiceLocked-->

ActivityManagerService.realStartServiceLocked-->

ApplicationThread.scheduleBindService-->

ActiveServices.requestServiceBindingLocked-->

ActivityThread.handleBindService-->

ServiceConnection.onServiceConnected-->

ActivityManagerNative.getDefault().publishService-->

ActivityManagerService.publishService-->

ActiveServices.publishServiceLocked-->

ServiceDispatcher.InnerConnection.connected()-->

ServiceDispatcher.connected()-->

RunConnection.run-->

ServiceDispatcher.doConnected-->

ServiceConnection.onServiceConnected

No1:

ServiceDispatcher起着连接ServiceConnection和InnerConnection的作用

No2:

bindServiceCommon主要完成两件事:

1)将客户端的ServiceConnection对象转化为ServiceDispatcher.InnerConnection对象

2)接着通过AMS来完成Service的具体的绑定过程,这对应于AMS的bindService方法

以上是关于Service工作过程的主要内容,如果未能解决你的问题,请参考以下文章

第九章:四大组件的工作过程

phpMyAdmin,存储过程不按预期工作

Tomcat的结构及工作原理

一个没有深度描述,关于springmvc工作原理过程以及涉及的设计模式

一个没有深度描述,关于springmvc工作原理过程以及涉及的设计模式

Android Service初解