- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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?对
您可能关注的文档
最近下载
- AP预备微积分 2024年真题 附答案和评分标准 AP Pre-Calculus 2024 Real Exam with Answers and Scoring Guidelines.pdf VIP
- 6.3工艺的类别与选择探究金工工艺(课件)-2024--2025学年高中通用技术苏教版(2019)必修.pptx VIP
- 耐药结核病全口服短程治疗专家共识.pptx VIP
- 4.1汉字的起源与演变规律(全国导游基础知识 第五版 ).ppt VIP
- 部编版语文六年级上册第2单元《口语交际:演讲》课件.pptx VIP
- 4.5旅游名联选读(全国导游基础知识 第五版 ).ppt VIP
- Unit 2 My school things Speed up(教学课件)-三年级英语上学期(外研版2024秋).pptx
- 未来五到十年传染病疫情监测与预警系统分析报告2025.docx
- 麟龙四量图通达信指标公式程序.docx VIP
- 大学生入党自传范文2000字范文.doc VIP
文档评论(0)