Android---进程间通信机制2
创始人
2024-05-28 13:48:11
0

Service Manager(SM):大管家。管理系统服务的 Ibinder。

1 如何启动 service_manager 服务

SM注册:

1 binder_open(): 打开驱动(设置大小128K),内存映射

2 binder_become_context_manager(): 设置 SM 为大管家 --- sm  作用:为了管理系统服务

        1 创建 binder_node 结构体对象

        2 proc --指向--> binder_node

        3 创建 work 和 todo 队列 ---》 类似 messageQueue

3 binder_loop(): BC_ENTER_LOOPER 命令

        1 写入状态 Loop

        2 去读数据:binder_thread_read: ret = wait_event_freezable_exclusive(proc->wait, binder_has_proc_work(proc,thread)); 进入等待。

 

binder_become_context_manager(): 设置 SM 为大管家;binder_loop(): 循环监听 

binder_ioctl 里的 binder_ioctl_set_ctx_mgr() :创建 binder_node 结构体对象,把 proc 指向 binder_node ,创建 work 和 todo 队列

Binder_loop: binder_write()   binder_reade()  binder_thread_write()  binder_thread_read()

2 如何获取 service_manager服务

SM 获取:

需要获取 SM 的情况:1、注册服务到SM;  2、通过 SM 去获取服务--java

  1 ProcessState::self() -> getContextObject(NULL)

        1 ProcessState::self()

          1. 打开驱动:binder

          2. 设置线程最大数目:15个

          3. mmap --设置共享内存大小(1M - 8K) 普通服务的大小

        2 getContextObject

          1. 创建一个 BpBinder --相当于客户端对象

  2 interface_cast

        1 new BpServiceManager(new BpBinder)

        2 remote.transact --> 远程调用(跨进程)

        3 remote == BpBinder

 3 java 层 ---serviceManager.addService

        1 new ServiceManagerProxy(new BinderProxy)

        2 mRemote == BinderProxy

        3 BinderProxy.mObject == BpBinder

        4 mRemote.transact = BpBinder.transact (调用transact 就跨进程)

3 详解 AIDL 生成 Java 类

AIDL 帮我们处理 Binder 中繁琐、复杂的操作。

1、AsInterface:区分是在当前进程,还是跨进程。

2、proxy在调用时:1 打包;2 检测;3 跨进程(跨进程时,当前客户端线程要挂起 ---同步情况)。

3 stub(服务端):onTransact(),通过 code 参数进入第二个 case(下图圈出)里,执行 this.addPerson()方法,就能调用到服务端正真的方法。

 

 

相关内容

热门资讯

上海网约车专项整治持续高压:违... 元旦佳节临近,为净化网约车市场环境、保障群众出行权益,12月31日,上海市交通委执法总队联合上海市公...
证监会:支持相关市场机构、人员... 证监会有关部门负责人答记者问。记者问:12月30日,五矿 证券公告就广道数字虚假陈述设立先行赔付专项...
业界:“AI+合同”法律服务进... 人民网北京12月31日电 (记者孙博洋)日前,国家市场监督管理总局和国家标准化管理委员会联合发布了《...
《山东省医疗纠纷预防和处理办法... 近日,山东省政府网站发布《山东省医疗纠纷预防和处理办法》(以下简称《办法》),依法高效预防和处理医疗...
国常会审议通过《供水条例(草案... 李强主持召开国务院常务会议,审议通过《供水条例(草案)》和《中华人民共和国药品管理法实施条例(修订草...
四川路桥:严格执行国家法律法规... 有投资者在互动平台向四川路桥提问:“请问公司是否针对员工生育或育儿设有相关的福利或激励政策?如有,什...
李强主持召开国务院常务会议,审... 据央视新闻,李强主持召开国务院常务会议,审议通过《供水条例(草案)》和《中华人民共和国药品管理法实施...
《济南市城市更新条例》2026... 大众网记者 刘帅 济南报道 城市更新,是城市高质量发展的“必答题”,更是关乎民生福祉的“民生卷”。 ...
证监会:着力健全REITs信息... 证监会印发《关于推动不动产投资信托基金(REITs)市场高质量发展有关工作的通知》。其中提到,维护市...