android进阶-Binder

参考:Android——Binder机制-CSDN博客

  • 机制:Binder是一种进程间通信的机制

  • 驱动:Binder是一个虚拟物理设备驱动

  • 应用层:Binder是一个能发起进程间通信的JAVA类 

  • Binder相对于传统的Socket方式,更加高效
  • Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内存拷贝都不需要,但实现方式又比较复杂。

使用的是内核空间进行通信和数据交互,由于只有系统才能调用系统空间,所以比较安全。

2.3.1 Binder通信的四个角色:
Client进程:使用服务的进程。
Server进程:提供服务的进程。
ServiceManager进程:ServiceManager的作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder实体的引用。
Binder驱动:驱动负责进程之间Binder通信的建立,Binder在进程之间的传递,Binder引用计数管理,数据包在进程之间的传递和交互等一系列底层支持。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/ly0724ok/article/details/117566381/

图中的Client,Server,Service Manager之间交互都是虚线表示,是由于它们彼此之间不是直接交互的,而是都通过与Binder驱动进行交互的,从而实现IPC通信(Interprocess Communication)方式。

3. 实例
程序跨进程调用系统服务的简单示例,实现浮动窗口部分代码:

    //获取WindowManager服务引用
    WindowManager wm = (WindowManager) getSystemService(getApplication().WINDOW_SERVICE);
    //布局参数layoutParams相关设置略...
    View view = LayoutInflater.from(getApplication()).inflate(R.layout.float_layout, null);
    //添加view
    wm.addView(view, layoutParams);
1
2
3
4
5
6
注册服务(addService): 在Android开机启动过程中,Android会初始化系统的各种Service,并将这些Service向ServiceManager注册(即让ServiceManager管理)。这一步是系统自动完成的。

获取服务(getService): 客户端想要得到具体的Service直接向ServiceManager要即可。客户端首先向ServiceManager查询得到具体的Service引用,通常是Service引用的代理对象,对数据进行一些处理操作。即第2行代码中,得到的wm是WindowManager对象的引用。

使用服务: 通过这个引用向具体的服务端发送请求,服务端执行完成后就返回。即第6行调用WindowManager的addView函数,将触发远程调用,调用的是运行在systemServer进程中的WindowManager的addView函数。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/ly0724ok/article/details/117566381/

相关推荐

  1. Android学习

    2024-05-11 13:00:08       22 阅读
  2. android-回调

    2024-05-11 13:00:08       12 阅读
  3. Android Binder 调用栈

    2024-05-11 13:00:08       32 阅读
  4. Android基础-binder机制

    2024-05-11 13:00:08       8 阅读
  5. [Android] Binder all-in-all

    2024-05-11 13:00:08       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 13:00:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 13:00:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 13:00:08       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 13:00:08       20 阅读

热门阅读

  1. Spring Boot中一般如何使用线程池?

    2024-05-11 13:00:08       13 阅读
  2. Nmap基础命令

    2024-05-11 13:00:08       9 阅读
  3. 探索 IPv6 协议:互联网的新一代寻址

    2024-05-11 13:00:08       8 阅读
  4. arm版银河麒麟桌面版v10下stressapptest测试

    2024-05-11 13:00:08       9 阅读
  5. 【Linux深度学习笔记5.7】

    2024-05-11 13:00:08       7 阅读
  6. 大模型训练框架DeepSpeed使用入门(1): 训练设置

    2024-05-11 13:00:08       11 阅读
  7. MutationObserver对象

    2024-05-11 13:00:08       9 阅读