1.在ContextImpl中startService方法会调用startServiceCommon方法,而startServiceCommon方法又会通过ActivityManagerNative.getDefault这个对象来启动一个服务,ActivityManagerNative.getDefault就是AMS。AMS会通过ActivityServices来完成Service的后续启动,ActivityServices是一个辅助AMS进行Service管理的类,包括Service的启动,绑定和停止等。
2.最后在realStartServiceLocked方法中调用了app.thread的scheduleCreateService来创建Service并调用其onCreate。(与Activity的启动类似)
3.在scheduleCreateService中也是通过发送消息给Handler H,然后在H中调用handleCreateService。
4.handleCreateService主要完成以下几件事:
创建Application对象并调用其onCreate方法(也是只会创建一次)
创建ContextImpl对象,并通过Service的attach方法建立二者之间的关系
final ArrayMap<IBinder,Service> mServices = new ArrayMap<IBinder,Service>();
除此之外,ActivityThread中还会通过handleServiceArgs方法调用Service的onStartCommand方法。