【正文】
在開(kāi)機(jī)階段, ServiceManager 協(xié)助將核心服務(wù)登記到 Binder Driver 裡;而在應(yīng)用程式執(zhí)行階段, ServiceManager 則協(xié)助將從 Binder Driver 裡找出 所要的核心服務(wù),並回傳其 IBinder 接口。如下圖: N a t i v e S e r v i c e M a n a g e r Bi n d e r D ri v e r L i n u x K e r n e l re f e r e n c e A n d r o i d Ru n t i m e J a v a Cl i e n t (A P o r S e r v i c e ) H A L S e n s o rS e r v i c e . j a v a IS e n s o rS e r v i c e N a t i v e S e n s o rS e r v i c e IBi n d e r 圖 以 C++ 改寫 SensorService 核心服務(wù) 核心服務(wù)是開(kāi)機(jī)時(shí)先啟動(dòng)的系統(tǒng)服務(wù);而 Client是開(kāi)機(jī)完成後,才啟動(dòng)的應(yīng)用程式。前面說(shuō)明過(guò),核心服務(wù)能以C++或 Java 來(lái)撰寫, 如果改用 C++來(lái)撰寫的話,就由 C++層的 SensorService 核心服務(wù)來(lái)呼叫 HAL模組,並提供 IBinder 接口。 於是 , Java Client模組就能使用較親切的ISensorService 接口來(lái)呼叫 SensorService 的功能了。徒增加 Java Client模組開(kāi)發(fā)者的麻煩。接者, Java Client 模組就能呼叫 IBinder 接口裡的 transact()函數(shù),進(jìn)而透過(guò) JNI而呼叫到 HAL模組 。 如下圖: N a t i v e S e r v i c e M a n a g e r IBi n d e r Bi n d e r D ri v e r L i n u x K e r n e l re f e r e n c e A n d r o i d S e r v i c e S e n s o rS e r v i c e IBi n d e r A n d r o i d Ru n t i m e S e r v i c e M a n a