- 11
- 0
- 约3.37千字
- 约 3页
- 2017-05-20 发布于北京
- 举报
一个进程如何将service加到另一个进程(系统servicemanager)中去涉和到进程间的通信
-------------------------------------------一个进程如何将service加到另一个进程(系统servicemanager)中去,涉及到进程间的通信------------------------
defaultServiceManager()调用addService添加服务的执行流程:---------------------------------------
1、
defaultServiceManager()-addService(
String16(media.player), new MediaPlayerService());
因为defaultServiceManager()返回ServiceManager的代理BpServiceManager,所以这里调用BpServiceManager的addService函数。
2、addService函数中分析
将调用,
status_t err = remote()-transact(ADD_SERVICE_TRANSACTION, data, reply);
因为remote()函数是BpServiceManager基类BpRefBase的函数,它返回mRemote,这个值我们知道保存了一个BpBinder对象,所以将调用BpBinder的transact函数。
3、在BpBinder::transact函数中
status_t BpBinder::transact(
uint32_t code, const Parcel data, Parcel* reply, uint32_t flags)
有如下实现,
status_t status = IPCThreadState::self()-transact(
mHandle, code, data, reply, flags);
因此它又将调用IPCThreadState的transact函数。
4、在IPCThreadState的transact函数中,
status_t IPCThreadState::transact(int32_t handle,
uint32_t code, const Parcel data,
Parcel* reply, uint32_t flags)
将先掉用
err = writeTransactionData(BC_TRANSACTION, flags, handle, code, data, NULL);
发送数据,然后使用,
err = waitForResponse(reply);
等待处理的结果,最后将处理结果err和reply分别通过返回值和参数返回。
5、在函数IPCThreadState::writeTransactionData中,将数据封装到mOut变量中。
6、在函数IPCThreadState::waitForResponse中,
起一个循环,首先调用talkWithDriver将mOut写给低层Binder,然后通过mIn将结果传出。
其次使用switch判断传出的消息,最后执行IPCThreadState::executeCommand对各种消息进行处理。
7、函数IPCThreadState::executeCommand,注意其中的几个消息的处理,
case BR_TRANSACTION:处理中
if (tr.target.ptr) {
spBBinder b((BBinder*)tr.cookie);
const status_t error = b-transact(tr.code, buffer, reply, tr.flags);
if (error NO_ERROR) reply.setError(error);
}
调用了BBinder对象b,这个对象就是BnServiceManager中的那个。
case BR_DEAD_BINDER:
{
BpBinder *proxy = (BpBinder*)mIn.readInt32();
proxy-sendObituary();
mOut.writeInt32(BC_DEAD_BINDE
您可能关注的文档
- 《金属腐蚀和防护》课程教学大纲.doc
- 《金碗》中的人物关系在“符号矩阵”中的展现和其文化内涵.docx
- 《金属材料热处理》1–3章思考题(10级).doc
- 《金玉良缘红楼梦》影评和有感.doc
- 《金融市场》模拟试题3.doc
- 《闻一多先生的说及做》导学案.doc
- 《阴阳师》斗技第1阵容4600雨雪流打法图文详解.docx
- 《阴阳师》结界卡合成公式1览.docx
- 《阿房宫赋》学习要点和能力训练.doc
- 《阿黛拉的非凡冒险》和“法式无厘头”.doc
- 2025年烷基苯磺酸盐项目可研报告_图文.docx
- 2025年烯丙基亚甲基二氧基苯项目可行性研究报告申请报告.docx
- 2025年热镀锌件技改项目环境影响报告书简本(DOC 34页).docx
- (必修)中外历史纲要(上)第13课 清朝前中期的鼎盛与危机教案及反思.pdf
- 2025年热电厂锅炉脱硫脱硝技术改造项目环境影响补充报告2103.环境影响评价.docx
- 2025年热熔型路面标线涂料试验检测报告.docx
- 2025年热转印布片50万片年项目环境影响报告表环评报告.docx
- 2025年热熔压敏胶研发及配套仓储扩建项目环境影响报告表【模板】.docx
- 2025年热浸镀锌项目环境影响报告(报批稿).docx
- (建筑工程管理)测量施工工法.pdf
最近下载
- 最新小学语文新课程标准测试题.pdf VIP
- 最新小学语文新课程标准测试题.doc VIP
- 农村狗狗交配的全过程,让你看了有点不可置信.pdf VIP
- 无人机装调检修工作流程6.22.pdf VIP
- 中国临床肿瘤学会(CSCO)尿路上皮癌诊疗指南2025.docx VIP
- 《2025中国临床肿瘤学会尿路上皮癌诊疗指南》.docx VIP
- 无人机实训手册(组装与调试).docx VIP
- Unit2 No rulesNo order sectionA 1a-1d听说课件 内嵌音频——人教.pptx VIP
- 《无人机的组装与调试》实训教案.docx VIP
- 孟繁金《基础会计(第九版)实训与练习》参考答案.docx VIP
原创力文档

文档评论(0)