E04HAL觀點ServiceManager和IBinder扮演的角色android高焕堂_第1页
E04HAL觀點ServiceManager和IBinder扮演的角色android高焕堂_第2页
E04HAL觀點ServiceManager和IBinder扮演的角色android高焕堂_第3页
E04HAL觀點ServiceManager和IBinder扮演的角色android高焕堂_第4页
E04HAL觀點ServiceManager和IBinder扮演的角色android高焕堂_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、hal觀點:servicemanager和ibinder扮演什麼角色呢?by 高煥堂l servicemanager的角色:它也是一項core service servicemanager本身也是一個native service,而且是天字第一號的核心服務(core service)。在系統啟動時(即執行init.rc時),就會立即啟動它,並登記(register)成為binder driver裡的第一號native service。如下圖所示:圖1、service manager是天字第一號核心服務l servicemanager負責登記其他的core service在android 2.1

2、版本裡,init.rc也會啟動java層的sensorservice服務(即sensorservice.java),並透過servicemanager去登記到binder driver裡,成為另一個核心服務。如下圖所示:圖2、 init.rc 啟動了許多核心服務 在開機過程中,會啟動許多項核心服務,servicemanager和sensorservice只是其中的兩個而已。l ibinder的角色 啟動完成後,就能讓c+層或java層的client模組來綁定(bind)、連結(connect)和呼叫(invoke)這些核心服務了。例如,c+層client模組可以綁定servicemanager

3、而取得它的ibinder接口(interface),然後透過ibinder而呼叫到servicemanager的transact()函數。如下圖:圖3、 c+層client呼叫service manager 這c+ client能使用c+層的servicemanager服務,但無法使用java層的sensorservice服務了。l 使用servicemanager的iservicemanager接口由於ibinder接口裡只有一個transact()函數,無法呈現servicemanager核心服務的各項功能或函數。徒增加c+ client模組開發者的麻煩。於是,在c+層增添一個servic

4、emanager.cpp類別,扮演adapter的角色,將ibinder接口包裝起來,轉換出可呈現servicemanager服務各項功能的新接口(即iservicemanager)。同樣地,在java層也增添一個servicemanager.java類別,扮演adapter的角色,將ibinder接口包裝起來,轉換出可呈現servicemanager服務各項功能的新接口(即iservicemanager)。如下圖:圖4、 service manager的adapter類別於是,c+ client模組就能使用較親切的iservicemanager接口來呼叫servicemanager的功能了。

5、如下圖:圖5、 c+ 層client使用iservicemanager接口同樣地,java client模組就能使用較親切的iservicemanager接口來呼叫servicemanager的功能了。如下圖:圖6、java 層client使用iservicemanager接口例如,java client模組可以呼叫iservicemanager接口裡的getservice()函數來綁定(即去binder driver裡取出)sensorservice服務,此時servicemanager會將sensorservice的ibinder接口回傳給java client模組。接者,java cli

6、ent模組就能呼叫ibinder接口裡的transact()函數,進而透過jni而呼叫到hal模組。如下圖:圖7、java 層client使用sensorservice的ibinder接口由於ibinder接口裡只有一個transact()函數,無法呈現sensorservice核心服務的各項功能或函數。徒增加java client模組開發者的麻煩。於是,增添一個java層的iserviceservice.stub類別(可依循aidl途徑去建構此類別,或自行設計此類別),扮演adapter的角色,將ibinder接口包裝起來,轉換出可呈現sensorservice服務各項功能的新接口(即ise

7、nsorservice)。於是,java client模組就能使用較親切的isensorservice接口來呼叫sensorservice的功能了。如下圖:圖8、java 層client使用sensorservice的isensorservice接口上圖裡的sernsorservice核心服務是以java撰寫的。前面說明過,核心服務能以c+或java來撰寫,如果改用c+來撰寫的話,就由c+層的sensorservice核心服務來呼叫hal模組,並提供ibinder接口。然後在撰寫一個java層的sensorservice.java類別來提供isensorservice接口給java client來使用。如下圖: 圖9、以c+ 改寫sensorservice核心服務 核心服務是開機時先啟動的系統服務;而client是開機完成後,才啟動的應用程式。這兩個時間點是不相同的,但都需要servicemanager的幕後協助才能完

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论