![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=1739149506-sRj3zxXHPBy3pzpsYTQz1p6Zz94eoFBa-0-1c519f4311c434e27346d942c11ccb82)
sendMessage方法向H类发送CREATE_SERVICE类型的消息,H类的handleMessage方法会对CREATE_SERVICE类型的消息进行处理,其中调用了ActivityThread的handleCreateService方法:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer163.jpg?sign=1739149506-uOfYPce3jxODD47i8cQsjgd24xAKUy35-0-c068618ff3fa5da77e865d463b5f4dae)
在注释1处通过ContextImpl的createAppContext方法创建了ContextImpl,并将该ContextImpl传入注释2处service的attach方法中:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer164.jpg?sign=1739149506-vrEm2vbtja65CKGDDTtGCTHyeBUQW3cq-0-bd5a76139368807e529972e4f34752c5)
在注释1处调用了ContextWrapper的attachBaseContext方法,如下所示:
![](https://epubservercos.yuewen.com/D63A94/16896237205618706/epubprivate/OEBPS/Images/figer165.jpg?sign=1739149506-YfAnBUwnpfx42mcTmSUep1QbjLVYGTas-0-4a24e2d6c0368200c26ca107cc435218)
注释1处的base一路传递过来的是ContextImpl,将ContextImpl赋值给ContextWrapper的Context类型的成员变量mBase,这样在ContextWrapper中就可以使用Context的方法,而Service继承自ContextWrapper,同样可以使用Context的方法。