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

建站宝盒的设置贵州整站优化seo平台

建站宝盒的设置,贵州整站优化seo平台,我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢,专业网站建设联系电话现在一起来分析Server端接收(来自APP端)Binder数据的整个过程,还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么?它其实是一个独立的进程,由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一样sp<ProcessState> ps = ProcessState::initWithDriver(driver);-->return new ProcessState();//在构造函数中open_driver(driver);//实例化ServiceManagersp<ServiceManager> manager = new ServiceManager(std::make_unique(Access));//设置服务端的BBinder对象//所以manager就是一个BBinder对象:因为class ServiceManager: public os:BnServiceManager{}//而BnServiceManager继承关系是: class BnServiceManager: public ::android::BnInterface<IServiceManager>{ }//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(sp<BBinder> obj):-->the_context_object = obj;//设置成为binder驱动的context Manager,成为上下文的管理者,ps代表SM进程ps->becomeContextManager(nullptr, nullptr);//重点在下面://通过Looper epoll机制处理binder事务sp<Looper> 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, sp<IBinder> * outBinder);//返回Binder*outBinder = tryGetService(name, true);-->std::map<string16, sp<IBinder>> 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();  }

上面分析的应该比较详细了,下面再总结下整体流程:

总结:

  1. binder驱动收到请求后, SM的looperCallBack回调会进行处理(BinderCallback- >handleEvent)
  2. 然后调用IPCThread::self()->handlePolledCommands()解读命令,向上分发
  3. the_context_object(注意这是一个BBinder对象)即BBinder->transact();
  4. 转交给BBinder的子类BnServiceManager.onTransact()处理,但这个是AIDL提供的代码,所以真正实现的是ServiceManager.getService();

最后再画一张图描述下整个过程:

 

http://www.khdw.cn/news/70013.html

相关文章:

  • 网站建设服务器端软件软文推广媒体
  • 网站做301打不开石首seo排名
  • 苗木企业网站建设源代码百度推广方法
  • 做虾皮网站赚钱吗如何查看网站权重
  • 西安网站建设APP开发seo店铺描述
  • 做网站要学会什么软件衡阳seo排名
  • 怎么在百度上做网站推广河南企业网站建设
  • 做网站需要Excel表格吗重庆seo管理平台
  • 做网站的升级人广州官方新闻
  • 永久免费域名空间注册seo观察网
  • 贵州省建设部网站百度登录页
  • 网站链接跳转怎么做廊坊网站建设公司
  • 小甲鱼网站开发如何制作网站
  • 中山市住房和城乡建设局官网西安百度提升优化
  • 教你做兼职的网站免费b2b网站大全免费
  • 小说网站的会员充值是怎么做的网站策划方案范文
  • 太康做网站公司外贸网站平台都有哪些
  • 合肥做网站的百度引擎入口
  • 免费的ppt网站推荐企业培训机构
  • 如何快速备案网站优化关键词排名软件
  • 网站开发技术 包括国内可访问的海外网站和应用
  • 中国建设银行网站首页企业网银整合营销传播方案案例
  • 有效方法的小企业网站建设策划是做什么的
  • 手机网站系统python培训
  • 网站建设企业推荐国外网站seo
  • java 小说网站开发鱼头seo软件
  • 自建网站需要学哪些seo网站优化培训
  • 宁夏建设工程质量安全监督网站揭阳seo快速排名
  • 订单系统单页面网站怎么做关键词优化分析工具
  • 郑州做网站哪家公司最好最近发生的热点事件