Activity中通过调用父类的startService()方法,其实调用的是ContextImpl的startService()方法。
ContextImpl.startService()通过ActivityManagerNative获取一个ActivityManagerService的代理对象,这个代理对象通过Binder驱动,调用到ActivityMangerService的startService方法,此startService方法判断进程是否已创建,如果以创建,则调用realStartService方法。若没创建,这通过Process.start函数,使用socket同Zygote进程通信。
Zygote进程复制出一个新的进程,并吧ActivityThread.main作为进程的入口。ActivityThread.main函数中 创建一个ActivityThread实例,调用此实例的attach()方法,
attach方法通过ActivityManagerService的代理对象,通过Binder通信,调用ActivityManagerService的attach方法。此方法调用realStartService(),此方法又通过appThread实例,通过Binder通信,调用ActivityThread实例的scheduleCreateService(),此方法通过向ActivityThread中的消息队列发送消息,通过主线程调用handleCreateService(),创建Service实例,调用onCreate().