如果看过上篇Activity的启动过程Activity的启动过程的文章,相信这篇Service的启动过程,能帮助大家更加容易理解Android四大组件的启动过程,首先我们知道Service分为两种工作状态,一种是启动状态,主要执行后台计算,一种是绑定状态,用于和其他组件的交互:
首先看看Service的启动过程:
这个流程图好像很熟悉,是的,他和Activity的启动过程很相似,都主要是通过ActivityManagerService(AMS)来实现的,而启动机制也离不开ApplicationThread,他其实就是Binder,前面的过程没什么要分析的,现在只要分析一下sendMessage的过程,首先scheduleCreatServicet用来创建Service对象并调用onCreat的方法。就这sendServiceArgLocked来调用其他方法,例如onStartConmand,这两个均是进程间通信。然后Handler:H接受消息,而handlerCreatService方法来完成了Service的最终启动,主要做了以下几件事:
- 通过类加载器创建Service实例,,然后创建Application对象并调用onCreat
- 接着创建ConTextImpl对象并通过Service的attach方法创建二者之间的联系,当然Service的ConTextImpl和Activity的ConTextImpl都是同一个ConText。
- 最后调用Service的onCreat方法并将Service对象存储到ActivityThread中的一个列表中,这个列表的定义是:
final ArrayMap<IBinder, Service> mService = new ArrayMap<IBinder, Service>();
由于Service的onCreat方法被执行了,意味着Service已经启动了此外,ActivityThread中还会通过handleServiceArgs方法调用Service的onStartConnmand方法;
这就是Service的启动过程,下一篇将介绍Service的Bind过程。