当前位置: 首页 > news >正文

沈阳网站建设索王道下拉网站制作公司员工

沈阳网站建设索王道下拉,网站制作公司员工,阿里云网络服务,wordpress手机图片站现在一起来分析Server端接收#xff08;来自APP端#xff09;Binder数据的整个过程#xff0c;还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么#xff1f;它其实是一个独立的进程#xff0c;由init解析i…现在一起来分析Server端接收来自APP端Binder数据的整个过程还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么它其实是一个独立的进程由init解析init.rc文件并由它创建要早于zygote进程ServiceManager的main函数进程文件位于framework/native/cmds/servicemanager/main.cpp 这个main函数运行意味着系统的SM进程开始运行了。下面是ServiceManager在init.rc中的描述。 下面是ServiceManager.rc文件 上面的rc文件描述说明servicemanager是一个系统的关键服务进程不能重启的因为 它一旦重启将会restart如healthd,zygote, audioserver, surfaceflinger, inputflinger等一系列重要的其它进程。 下面先给出一个非常重要的结论就是ServiceManager的父类继承关系最顶层的父类是IServiceManager和BBinder后面的源码分析的时候这个很有用否则看不懂代码。 大家知道每个android系统关键进程或app进程启动时会先创建binder我们从SM的进程代码进行分析如下 main.cpp-main()--char* driver/dev/binder;//启动初始化binder驱动普通app进程是通过ProcessState::self()-new ProcessState()来启动进程然后在构造函数中初始化binder,//与SM启动创建binder一样spProcessState ps ProcessState::initWithDriver(driver);--return new ProcessState();//在构造函数中open_driver(driver);//实例化ServiceManagerspServiceManager manager new ServiceManager(std::make_unique(Access));//设置服务端的BBinder对象//所以manager就是一个BBinder对象因为class ServiceManager: public os:BnServiceManager{}//而BnServiceManager继承关系是 class BnServiceManager: public ::android::BnInterfaceIServiceManager{ }//BnInterface的继承关系位于Interface.h): class BnInterface: public BBinder{ }//综上manager就是一个BBinder对象。//注意BnServerManager.h这个头文件是需要根据IServerManager.aidl文件自己去编译生成的//可以使用AIDL命令去编译IPCThreadState::self()-setTheContextObject(manager); --IPCThreadState.cpp-self():--return new IPCThreadState(); //创建线程对象IPCThreadState.cpp-setTheContextObject(spBBinder obj):--the_context_object obj;//设置成为binder驱动的context Manager,成为上下文的管理者ps代表SM进程ps-becomeContextManager(nullptr, nullptr);//重点在下面://通过Looper epoll机制处理binder事务spLooper looper Looper::prepare(false);//设置callbackBinderCallback::setupTo(looper);//向Binder驱动发送BC_ENTER_LOOPER事务请求并获得binder设备的文件描述符//监听binder_fd文件描述符的数据变化--IPCThreadState::self()-setupPolling(binder_fd);looper-addFd(binder_fd, Looper::POLL_CALLBACK,Looper::EVENT_INPUT, cb, nullptr);--//当binder驱动发来消息后调用下面的回调事件处理int handleEvent(int fd int event){//从binder驱动接收到消息并处理。IPCThreadState::self()-handlePolledCommands();--do //当读 缓存中数据未消费完时持续循环读{result getAndExecuteCommand();--result talkWithDriver();//从Binder驱动读入数据mIn--cmd mIn.readInt32(); //从数据中读取BR响应码--executeCommand(cmd);--case BR_TRANSACTION: //走这个分支//对SM来说使用the_context_object这个BBinder对象//而transact应该在SM的父类中定义即BBinder--the_context_object-transact(tr.code,buffer,reply,tr.flags);--BBinder.cpp-transact()://这里注意下面调用的其实是子类的onTransact(即BnServiceManager.h中定义,但这只是一个头文件)//更进一步分析其实是调用由IServiceManager.aidl生成的Bn端的cpp文件中(需要自己编译)-- onTransact();--IServiceManager.cpp-BnServiceManager::onTransact():--getService(); //其实是它的孩子即ServiceManager的接口--ServiceManager.cpp-getService(name, spIBinder * outBinder);//返回Binder*outBinder tryGetService(name, true);--std::mapstring16, spIBinder mNameToService; //维持一张表-- auto it mNameToService.find(name);service (it-second); //取出Service;out service-binder;return out;}while(mIn.dataPosition() mIn.dataSize()); //当我们清空执行完所有的命令后最后处理BR_DECREFS和BR_RELEASEProcessPendingDerefs();FlushCommands(); } 上面分析的应该比较详细了下面再总结下整体流程 总结 binder驱动收到请求后 SM的looperCallBack回调会进行处理BinderCallback- handleEvent然后调用IPCThread::self()-handlePolledCommands()解读命令向上分发the_context_object(注意这是一个BBinder对象)即BBinder-transact();转交给BBinder的子类BnServiceManager.onTransact()处理,但这个是AIDL提供的代码所以真正实现的是ServiceManager.getService(); 最后再画一张图描述下整个过程
http://www.hkea.cn/news/14360617/

相关文章:

  • 怀远做网站电话黄岛建网站
  • 大庆市建设网站中小企业网站制作报价
  • 校园网站建设 德育朝阳网站建设开发
  • 气象网站建设的自查报告开发公司财务制度
  • 中国建设银行北京分行门户网站公告怎么棋牌网站建设
  • 颇有名气的网站建设专家局域网搭建wordpress慢
  • 网站cms管理后台电话号码科威网络做网站怎么样
  • 一般网站要多大空间2023年10月爆发新冠
  • 智库建设网站方案WordPress模板邮票类
  • 做网站找不到客户医院手机网站源码
  • 网站建设塞西seo厂家费用低
  • 专业网站建设网站现在还有没有做任务的网站
  • 哪些网站是做零售的在IIs下建设一个网站
  • 网站备案接入方式新品发布会流程
  • 网站源码程序关于做一动物网站的界面个
  • 企业网站系统官网怎么键卖东西的网站
  • 哈尔滨网站建设v5star直播是网站怎么做
  • 爱站工具的功能常州高端网站建设公司
  • 长沙做彩票网站公司利用软件做许多网站违法吗
  • 微信小程序免费制作平台软件太原seo计费管理
  • 在闲鱼可以做网站吗宁波网站快速优化
  • 网站拖拽html导入错误 wordpress
  • 江西南昌建设厅网站怎样编辑网站标题
  • 六安网站建设 220用照片做视频的网站好
  • 青岛建网站公司百度提交网址多久才会收录
  • 长春专业做网站公司更改域名代理商对网站有影响吗
  • 电子商务网站建设与维护管理百度广告位价格
  • 企业宣传型网站建设产品系统设计案例
  • 手机主页网站哪个好用富阳设计网站
  • 福州电子网站建设厦门有做网站建设