啟動(dòng)流程:
Process A進(jìn)程采用Binder IPC向system_server進(jìn)程發(fā)起startService請(qǐng)求;
system_server進(jìn)程接收到請(qǐng)求后愉适,向zygote進(jìn)程發(fā)送創(chuàng)建進(jìn)程的請(qǐng)求衔统;
zygote進(jìn)程fork出新的子進(jìn)程Remote Service進(jìn)程嚎朽;
Remote Service進(jìn)程蹂匹,通過(guò)Binder IPC向sytem_server進(jìn)程發(fā)起attachApplication請(qǐng)求岛都;
system_server進(jìn)程在收到請(qǐng)求后风瘦,進(jìn)行一系列準(zhǔn)備工作后队魏,再通過(guò)binder IPC向remote Service進(jìn)程發(fā)送scheduleCreateService請(qǐng)求;
Remote Service進(jìn)程的binder線程在收到請(qǐng)求后万搔,通過(guò)handler向主線程發(fā)送CREATE_SERVICE消息胡桨;
主線程在收到Message后,通過(guò)發(fā)射機(jī)制創(chuàng)建目標(biāo)Service瞬雹,并回調(diào)Service.onCreate()方法昧谊。 到此,服務(wù)便正式啟動(dòng)完成酗捌。當(dāng)創(chuàng)建的是本地服務(wù)或者服務(wù)所屬進(jìn)程已創(chuàng)建時(shí)呢诬,則無(wú)需經(jīng)過(guò)上述步驟2、3胖缤,直接創(chuàng)建服務(wù)即可尚镰。