![Android进阶解密](https://wfqqreader-1252317822.image.myqcloud.com/cover/331/31186331/b_31186331.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
5.5 Service的Context创建过程
Service的Context创建过程与Activity的Context创建过程类似,是在Service的启动过程中被创建的。Service的Context创建过程的时序图可以参考图5-3,这里就不再给出。在4.2.2节中讲到了ActivityThread启动Service的过程,我们从这里开始分析。ActivityThread的内部类ApplicationThread会调用scheduleCreateService方法来启动Service,如下所示:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer162.jpg?sign=1739301877-obBWu030MB1YTJBHtoBDnBI32yZxLcc6-0-471df3bc84634a95eef4abaa8a8c8f85)
sendMessage方法向H类发送CREATE_SERVICE类型的消息,H类的handleMessage方法会对CREATE_SERVICE类型的消息进行处理,其中调用了ActivityThread的handleCreateService方法:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer163.jpg?sign=1739301877-8RZ46pv0HDTp3sEaXjVd7aaL3AwooETz-0-057b1b048cd36609f9b76ef569cea230)
在注释1处通过ContextImpl的createAppContext方法创建了ContextImpl,并将该ContextImpl传入注释2处service的attach方法中:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer164.jpg?sign=1739301877-9ShDg104LdvUpzKQvH4PRQD0lnkOLOuD-0-6d5d2ab30f78725dca21f1f86991963c)
在注释1处调用了ContextWrapper的attachBaseContext方法,如下所示:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer165.jpg?sign=1739301877-1x5Vh3cdhYV9u5aZrGAfin0aFcR9T4UU-0-850b8325fab597ff9ba38bd054639412)
注释1处的base一路传递过来的是ContextImpl,将ContextImpl赋值给ContextWrapper的Context类型的成员变量mBase,这样在ContextWrapper中就可以使用Context的方法,而Service继承自ContextWrapper,同样可以使用Context的方法。