一个进程如何将service加到另一个进程(系统servicemanager)中去涉及到进程间的通信.docVIP

一个进程如何将service加到另一个进程(系统servicemanager)中去涉及到进程间的通信.doc

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

-------------------------------------------一个进程如?何将ser?vice加?到另一个进?程(系统ser?vicem?anage?r)中去,涉及到进程?间的通信------------------------ defau?ltSer?viceM?anage?r()调用add?Servi?ce添加服?务的执行流?程:--------------------------------------- 1、 defau?ltSer?viceM?anage?r()-addSe?rvice?( Strin?g16(media?.playe?r), new Media?Playe?rServ?ice()); 因为def?aultS?ervic?eMana?ger()返回Ser?viceM?anage?r的代理B?pServ?iceMa?nager?,所以这里调?用BpSe?rvice?Manag?er的ad?dServ?ice函数?。 2、addSe?rvice?函数中分析? 将调用, statu?s_t err = remot?e()-trans?act(ADD_S?ERVIC?E_TRA?NSACT?ION, data, reply?); 因为rem?ote()函数是Bp?Servi?ceMan?ager基?类BpRe?fBase?的函数,它返回mR?emote?,这个值我们?知道保存了?一个BpB?inder?对象,所以将调用?BpBin?der的t?ransa?ct函数。 3、在BpBi?nder::trans?act函数?中 statu?s_t BpBin?der::trans?act( uint3?2_t code, const? Parce?l data, Parce?l* reply?, uint3?2_t flags?) 有如下实现?, statu?s_t statu?s = IPCTh?readS?tate::self()-trans?act( mHand?le, code, data, reply?, flags?); 因此它又将?调用IPC?Threa?dStat?e的tra?nsact?函数。 4、在IPCT?hread?State?的tran?sact函?数中, statu?s_t IPCTh?readS?tate::trans?act(int32?_t handl?e, uint3?2_t code, const? Parce?l data, Parce?l* reply?, uint3?2_t flags?) 将先掉用 err = write?Trans?actio?nData?(BC_TR?ANSAC?TION, flags?, handl?e, code, data, NULL); 发送数据,然后使用, err = waitF?orRes?ponse?(reply?); 等待处理的?结果,最后将处理?结果err?和repl?y分别通过?返回值和参?数返回。 5、在函数IP?CThre?adSta?te::write?Trans?actio?nData?中,将数据封装?到mOut?变量中。 6、在函数IP?CThre?adSta?te::waitF?orRes?ponse?中, 起一个循环?,首先调用t?alkWi?thDri?ver将m?Out写给?低层Bin?der,然后通过m?In将结果?传出。 其次使用s?witch?判断传出的?消息,最后执行I?PCThr?eadSt?ate::execu?teCom?mand对?各种消息进?行处理。 7、函数IPC?Threa?dStat?e::execu?teCom?mand,注意其中的?几个消息的?处理, case BR_TR?ANSAC?TION:处理中 if (tr.targe?t.ptr) { spBBind?er b((BBind?er*)tr.cooki?e); const? statu?s_t error? = b-trans?act(tr.code, buffe?r, reply?, tr.flags?); if (error? NO_ER?ROR) reply?.setEr?ror(error?); } 调用了BB?inder?对

文档评论(0)

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

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

1亿VIP精品文档

相关文档