为Android添加核心层服务.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为Android添加核心层服务.doc

为Android添加底层核心服务 为什么要写底层核心服务呢? 因为底层核心服务是Android框架里最接近Linux/Driver的部分。为了充分发挥硬件设备的差异化特性,核心服务是让上层Java应用程序来使用Driver/HW Device 特色的重要管道。例如Media、Telephone等底层硬件。 在开机过程中,就可以启动核心服务(汉字输入法服务等),让众多应用程序来共同使用。 由于共用,所以能有效降低Java应用程序的大小(Size)。 核心服务与Java 层的Service有何区别和关系? Android具有两层服务 --Java层SDK-based Service --C++层的Code Service 以MediaPlayer为例,说明两种服务的关系如下图: 编写自己的核心服务(C++层) 1).要点 核心服务通常在独立的进程(Process)里执行。 必须提供IBinder接口,让应用程序可以进行跨进程的绑定(Binding)和调用。 因为共用,所以必须确保多线程安全(Thread-safe)。 使用C++来实现,并调用IServiceManager::addService()函数添加到系统的Binder Driver里。 上层应用程序通过ServiceManager获取该服务。 上层应用程序通过IBinder::transact()函数来与核心服进行数据交互。 2).添加服务 下面详细介绍如何添加一个底层服务到系统中,假设服务名为AddService,其用途是对传入的参数加上1000,并返回结果。 服务实现 进入android源码的目录frameworks/base,在该目录下建立自己的目录,假设为addservice,再在这个目录中建立两个子目录addserver和libaddservice,addserver用于存放服务的启动文件,其最终的生成为可执行文件,在系统启动的时候运行,libaddservice用于存放服务的实现文件,最终会生成动态链接库,有addserver调用。 首先,服务的实现文件包括两个文件, AddService.h和AddService.cpp, 以下是AddService.h: #ifndef ANDROID_GUILH_ADD_SERVICE_H #define ANDROID_GUILH_ADD_SERVICE_H #include utils/RefBase.h #include binder/IInterface.h #include binder/Parcel.h #include utils/threads.h namespace android { class AddService : public BBinder{//从BBinder派生,实现本地接口 mutable Mutex mLock; int32_t mNextConnId; public: static int instantiate(); AddService(); virtual ~AddService(); virtual status_t onTransact(uint32_t, const Parcel, Parcel*, uint32_t); }; }; //namespace #endif 然后是服务的实现文件AddService.cpp: #include AddService.h #include binder/IServiceManager.h #include binder/IPCThreadState.h namespace android { static struct sigaction oldact; static pthread_key_t sigbuskey; //把自己注册到系统中 int AddService::instantiate() { LOGE(AddService instantiate); int r = defaultServiceManager()-addService( String16(guilh.add), new AddService());//这里主要是把//AddSerice这个服务添加到Binder Driver中服务名为guilh.add LOGE(Add

文档评论(0)

zhangningclb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档