美文网首页
Android Framework学习之Service的启动原理

Android Framework学习之Service的启动原理

作者: 一只二凡子 | 来源:发表于2022-12-11 09:49 被阅读0次

,1.service启动有哪几种方式?

2.service启动过程中主要流程有哪些?

3.service启动过程涉及哪些参与者,通信过程是怎样的?

从startService函数开始,通过AMS的binder对象,然后向AMS发起了startService调用。

AMS根据intent查询到ServiceRecord对象(每个应用端的Service在AMS里面都要对应这么一个对象),pendingStarts是之后准备调用onStartCommend函数时用的。

ServiceRecord里的app就表示Service所在的进程,如果Service所在的进程非空并且已经就绪了,sendServiceArgsLocked函数主要是调用应用端的onStartCommend函数。

app是服务所对应的进程,realStartServiceLocked是真正启动Service的方法,startProcessLocked是启动Service的进程。

attachApplicationLoced是处理这些pendingService的

scheduleCreateService是向应用端发起IPC调用,应用端收到之后会创建Service,执行Service里的OnCreate回调.

Service的创建过程和Activity的大同小异,都是通过LoadedApk里的classLoad去加载Service这个类,然后给service赋予上下文对象,执行onCreate回调。

scheduleServiceArgs会调用到应用端,应用端封装了一个ServiceArgsData对象并扔到应用主线程去处理。

应用端通过ServiceRecord查出存储的Service,如果Service不为空就去执行onStartCommand方法。

AMS通过Socket向Zygote发起启动应用进程的请求,应用进程启动后执行ActivityThread的main函数,里面会向AMS发起attachApplication调用,AMS会向应用发起bindApplication的调用,然后就去处理pendingService, scheduleCreateService是让应用端createService的,scheduleServiceArgs是让应用端执行onStartCommand的。

bindServiceLocked是启动Service的,他没有将service加到pendingService队列里,所以不会触发onStartCommand,这就是与onStartServie的区别。

相关文章

网友评论

      本文标题:Android Framework学习之Service的启动原理

      本文链接:https://www.haomeiwen.com/subject/rojpbktx.html