Android开发中,Binder是一种跨进程通信方式,而使用AIDL可以实现Binder的工作。 如何使用它是了解它的第一步,本文章主要记录使用Binder的一些步骤。...3.创建Service Service中创建Binder对象,在onBind方法中返回这个对象,Binder对象中具体实现了IInfManager接口中的方法。...; } private Binder binder = new IInfManager.Stub() { @Override public void...return name; } }; } 4.服务端OneActivity OneActivity中设置按钮跳转至TwoActivity,这里为了简单,使用...}); } 5.客户端TwoActivity 首先绑定InfManageService服务,建立连接,连接成功后通过返回的IBinder对象可以获得IInfManager接口,可以通过这个接口去使用服务端的方法
文章目录 前言 一、binder_loop 方法调用 二、binder_loop 方法参数 svcmgr_handler 三、binder_loop 方法 四、binder_parse 方法 前言 在上一篇博客...【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 ) 中分析了...); 将自己注册成 Binder 进程的上下文 : binder_become_context_manager(bs) 开启 Binder 循环 : binder_loop(bs, svcmgr_handler...方法 ---- 在开启 Binder 循环的 binder_loop 方法中 , 如果收到 Binder 读写消息信息 , 调用 binder_parse 方法处理 , 调用代码如下 : res =...四、binder_parse 方法 ---- binder_parse 方法中接收的 binder_handler func 参数是一个回调方法 ; 该方法是 Binder 服务收到了客户端请求后的回调函数
Binder自己的函数,这样的话在用户空间就可以通过系统调用以访问文件的方式使用Binder。...[2copy.png] Binder单次通信只需要进行一次拷贝,因为它使用了内存映射,将一块物理内存(若干个物理页)分别映射到接收端用户空间和内核空间,达到用户空间和内核空间共享数据的目的。...Binder套件架构 ---------- 内核层的Binder驱动已经提供了IPC功能,不过还需要在framework native层提供一些对于驱动层的调用封装,使framework开发者更易于使用...经过层层封装,在使用者使用AIDL时对于Binder基本上是无感知的。 这里贴一张架构图。...换言之AIDL就是对BinderProxy.transact和Binder.onTransact进行了封装,使用者不必再自己定义每次通讯的code以及参数解析。
而在Android中,并没有使用这些,取而代之的是Binder机制。...Binder机制是採用OpenBinder演化而来,在Android中使用它的原因例如以下: 採用C/S的通信模式。...Client作为Service的使用者,当它想使用服务时,得向SM申请自己所须要的服务。Client能够申请一个或多个服务。 当Client申请服务成功后,Client就能够使用服务了。...当一个进程调用Binder驱动时,使用BINDER_SET_CONTEXT_MGR命令(在驱动的binder_ioctl中)将自己注冊成SM时,Binder驱动会自己主动为它创建Binder实体。...(对于发送方,为读缓冲区) 1.3.5 匿名Binder 之前在介绍Android使用Binder机制的长处中,提到Binder能够建立点对点的私有通道,匿名Binder就是这样的方式。
Android开发人员如何使用Binder通信(AIDL、Java层架构) 基础知识理解 Unix内核和应用程序进程所使用的物理内存是分开的,内核使用1G的物理内存,其他应用程序有各自的3G物理内存(...(使用了mmap) 理解Binder驱动的存在 因为要实现跨进程通信,那么,数据是如何传输的,怎么组织的。...这就带来一个问题,Binder驱动是运行在内核态的,那么数据在使用Binder驱动传输时,是需要在内核内存空间与用户内存空间进行拷贝操作的。...当Client需要使用Server传递过来的Binder的时候,向驱动传递的数据包中,就需要用到Binder的引用编号,驱动将会对引用编号进行校验,这样就能在安全性上得到保障。...类) 其在Binder驱动中,以binder_node表述 当Server进程的Binder服务需要被Client进程所使用时,Binder驱动会创建一个binder_ref结构体,这也就是Server
文章目录 一、系统服务 二、系统服务主函数 三、开启 Binder 四、注册上下文 五、开启 Binder 循环 六、binder_write 方法 七、binder_ioctl 内核方法 八、binder_ioctl_write_read...: 获取 Binder 驱动 , 并且申请了 128 KB 的内存映射地址 , bs = binder_open(driver, 128*1024); ; ② 注册上下文 : 将自己注册成 Binder...binder_open(driver, 128*1024); // 将自己注册成 Binder 进程的上下文 if (binder_become_context_manager(bs.../service_manager.c ; 三、开启 Binder ---- 通过调用 bs = binder_open(driver, 128*1024); 开启 Binder 的方法 struct binder_state.../binder.c 中 ; 在 binder_loop 方法中 , 先调用了 binder_write 方法 , 然后开启了死循环 ; void binder_loop(struct binder_state
以AIDL为例 代码: package my.itgungnir.ipc.binder; public interface IBookManager extends android.os.IInterface...implements my.itgungnir.ipc.binder.IBookManager { private static final java.lang.String DESCRIPTOR...= "my.itgungnir.ipc.binder.IBookManager"; /** * Construct the stub at attach it to...= null) && (iin instanceof my.itgungnir.ipc.binder.IBookManager))) { return ((my.itgungnir.ipc.binder.IBookManager...():返回当前的Binder对象; onTransact(int code, Parcel data, Parcel reply, int flag):这个方法运行在服务端的Binder线程池中,当客户端发起请求时
Binder通信机制 为什么使用Binder Android使用Linux内核,拥有非常多的跨进程通信机制,比如管道、Socket等等,为什么会添加一个BInder通信机制来作为Android特有的进程间通信机制呢...性能 移动设备上广泛使用跨进程通信肯定会对通信机制提出严格要求,而Binder比传统的方式更加高效。...得到这个服务对应的Binder对象这种方式来进行获取,然后就可以使用这个Binder对象来进行相应操作了,具体来说这也是ContentProvider为我们封装的内容了。...平常我们访问系统服务,比如媒体资源是使用ContentProvider,它的底层实现就是BInder,只是系统为我们做了封装。...文件,它的基本结构是这样的:(1)首先这个接口会继承于android.os.IInterface接口;(2)会声明一个名为Stub的内部抽象类,继承自android.os.Binder,也就是说是一个Binder
相关知识 1.binder系统中里面了一个资源池用于存放bbinder。 2.客户端会根据索引在binder系统中查找到对应的bbinder,接着构造bbinder对应的bpbinder。...这样binder系统中0就是对应的servicemanager的bbinder。...6.为什么bpbinder可以调用到bbinder,这就是binder系统为我们做的事情。...jointhreadpool调用talkwithdrive等待处理binder的请求。...因此服务端有两个线程在处理binder系统的请求。之后通过iotcl的形式告知binder自己的handler资源索引值的值比如serviceManager就会告诉binder自己是0。
文章目录 一、Linux内核的基础知识 1、进程隔离/虚拟地址空间 2、系统调用----Linux内核中重要概念 二、Binder通信机制的介绍 1、为什么使用Binder 2、Binder通信模型 3...、Binder通信机制原理 三、Aidl 一、Linux内核的基础知识 1、进程隔离/虚拟地址空间 进程隔离技术是依靠虚拟地址空间的不同来进行进程之间的隔离的。...3)、binder驱动 二、Binder通信机制的介绍 1、为什么使用Binder android使用linux内核,linux本身就有很多进程间通信机制,为什么又出现了Bindle?...1)、性能:binder相比传统的socket方式,更加的高效; 2)、安全:binder协议本身支持通信双方进行身份校验,而像socket的端口号等都可以伪造; 2、Binder通信模型 1)、通信录...:serviceManager 2)、电话基站:binder驱动 3、Binder通信机制原理
那时候一般都会接触AIDL,刚开始就会用,但是根本不知道为什么这么用,那之后连进程,线程的概念都没有建立起来,好不容易建立起线程进程的概念了,就好奇的看各种网上介绍AIDL的本质,看的也是似懂非懂,能很熟练的使用...AIDL和service就不错了,那时候不是很完全的了解Binder,只知道有Binder.java这个类。...JNI的使用,熟悉了Native层的开发。...但是我觉得金钱不是唯一衡量学习的唯一标准,当你在学习的Binder的时候,你会发现发明计算机的人是多么的伟大,对技术都会保持一颗敬畏之心,而不是因为会使用几个API就觉得自己很牛逼。...七、如何判断自己学会Binder了 我觉得有以下几个衡量标准 首先,你可以回答任何人向你提出的任何Binder的问题。
在Binder: ServiceManager的获取文章中,分析了ProcessState与IPCThreadState的创建过程。...BpBinder::transact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { // Once a binder...(bool isMain) { if (mThreadPoolStarted) { String8 name = makeBinderThreadName(); // 开启binder...default: ALOGE("*** BAD COMMAND %d received from Binder driver\n", cmd); result = UNKNOWN_ERROR...至此在client端的数据交互流程已经分析完毕,后续我们再来看binder传输过程中的service端,看它是如何接收与处理数据的。
结合自己的学习历程分享一下我对Binder架构的基本理解吧。...本文基本上是在这两份资料的理解上完成的。 ? binder就是Android中实现进程间通信的一种架构。...一直在说的binder到底是个什么东西 一般Binder,就是指binder机制,在一些描述中,有的会说把这个binder传给谁。不过在上面两篇里面基本很少这么使用。...另外注意proxy这个类是被client使用的,他手上有stub类的引用,也就是有Binder的引用,所以也可以看到 mRemote.transact(Stub.TRANSACTION_save, _data...service的真正的实现使用的 proxy类拥有stub对象的引用service,也就是binder的引用(实际在放入transaction的时候是binder token),他负责当client调用
AIDL 使用步骤 1.创建 UserManager.aidl 接口文件,声明作为 Server 端的远程 Service 具有哪些能力 UserManager.aidl: package com.me.guanpj.binder...本地对象以及Binder代理对象的转换。...Binder : 代表 Binder 本地对象,BinderProxy 类是它的内部类,是 Server 端 Binder 对象的本地代理,它们都继承了 IBinder 接口,因此都能跨进程进行传输,Binder...UserManagerImpl : 它继承了 Binder 并实现了 IInterface 接口,说明它是 Server 端的 Binder 本地对象,并拥有 Server 承诺给 Client 的能力...本地对象,将它直接返回给 Client 调用;否则,使用 UserManagerImpl$Proxy 类将其进行包装后再返回,Proxy 类也实现了 IUserManager 接口,因此,在 Client
Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、 CharSequence),使用这些类型时不需要import声明。...如果使用自定义类型作 为参数或返回值,自定义类型必须实现Parcelable接口。...编写执行这一编组操作的代码是一项繁琐的工作,因此 Android 会使用 AIDL 来处理。 通过这种机制,我们只需要写好 aidl 接口文件,编译时系统会帮我们生成 Binder 接口。...IPC:进程间通信或跨进程通信,指的是两个进程之间进行数据交互 多进程之间通信是IPC一个使用场景 使用多进程,只需给四大组件指定android:process属性; 多进程会造成几个问题: 静态变量或单列模式完全失效...方法参数中,除了基本数据类型,其他类型的参数都需要标上方向类型。 in(输入), out(输出), inout(输入输出)。
static int open_driver() { int fd = open("/dev/binder", O_RDWR | O_CLOEXEC); .........return fd; } 总结:打开/dev/binder设备,通过mmap为binder分配一块虚拟地址空间 step2 frameworks/native/libs/binder/IServiceManager.cpp...= NULL) { IBinder* b = e->binder; if (b == NULL || !...驱动的数据,mOut用来存储发往Binder驱动的数据,它们默认大小都为256字节(形式上是不是和socket很像???)...驱动进行通信 总结:发送 ADD_SERVICE_TRANSACTION 和binder通信 流程图 ?
Binder是什么 Binder 是 Android 系统中实现 IPC (进程间通信)的一种机制。...并且 Client 端可以设置死亡通知,及时监听 Server 端的存活情况; 使用简单,对开发者友好:Binder 封装了底层 IPC 通信,让开发者无需关心底层细节,也无需关心 Server 端的实现细节...Binder 名字转化成 Client 中对该 Binder 的引用,使得 Client 能够通过 Binder 的名字获得对 Binder 实体的引用。...具体流程如下: 首先由一个进程使用 BINDER_SET_CONTEXT_MGR 命令通过 Binder 驱动将自己注册为 ServiceManager 。...Binder设计与实现 - 设计篇 Binder学习指南 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制
,安全性较好 二者这是安全问题,Android作为一个开放式,拥有众多开发者的的平台,应用程序的来源广泛,确保终端安全是非常重要的,传统的IPC通信方式没有任何措施,基本依靠上层协议,其一无法确认对方可靠的身份...Binder通信的四个角色 Client进程:使用服务的进程。 Server进程:提供服务的进程。...获取服务(getService):Client进程使用某个Service前,须先向ServiceManager中获取相应的Service。...使用服务:Client根据得到的Service信息建立与Service所在的Server进程通信的通路,然后就可以直接与Service交互。该过程:client是客户端,server是服务端。...的基本平台架构便可以直接进行IPC通信。
通信机制 1、为什么使用binder 在上面这些可供选择的方式中,Android使用得最多也最被认可的还是Binder机制。...使用Binder跨进程通讯主要有一下两个方面: (1)、性能方面 跨进程通讯中,只有socket支持Client-Server的通信方式,但是socket作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信...共享内存虽然无需拷贝,但控制复杂,难以使用。 ?...使用传统IPC只能由用户在数据包里填入UID和PID,但这样不可靠,容易被恶意程序利用。可靠的身份标记只有由IPC机制本身在内核中添加。其次传统IPC访问接入点是开放的,无法建立私有通道。...3、binder通信模型 Binder的通信模型有4个角色:Binder Client、Binder Server、Binder Driver(Binder驱动)、ServiceManager。 ?
文章目录 前言 一、查找 Binder 服务 二、service_manager.c | do_find_service 前言 在上一篇博客 【Binder 机制】Native 层 Binder 机制分析...( binder_loop | svcmgr_handler | binder.c | binder_parse ) 中 , 简单介绍了 在 service_manager.c 中的 main 函数中调用了...; 一、查找 Binder 服务 ---- 参考 【Binder 机制】Native 层 Binder 机制分析 ( binder_loop | svcmgr_handler | binder.c |...binder_parse ) 二、binder_loop 方法参数 svcmgr_handler 章节 ; 在 svcmgr_handler 方法中 , 查找 Binder 服务 , 需要执行如下逻辑...binder_state *bs, struct binder_transaction_data *txn, struct binder_io
领取专属 10元无门槛券
手把手带您无忧上云