Binder原理(一)

最近在画各种图,所以这里贴贴图来说明一下


前言

安卓中的Binder是一牵扯比较多的东西,由于内容较多先把bindServer 等 一些流程单独提到下一次补充。其次,虽然自己所掌握的东西感觉还是相对浅显、C++层也不曾涉及。但是这个知识点是一个必须经历的过程。先尽量把自己能想到的点写一下。以便后续补充。


Binder是什么


Binder优势


Binder的通信机制


AIDL文件编译成java文件组成



AIDL编译出来的方法的执行过程(暂时忽略bindService流程)

  • 关于bindService的作用:客户端调用bindService传入ServiceConnection回调接口参数来回调服务连接状态。通过AMS和远程服务通信获取远程服务的IBinder对象,返回给客户端,客户端就可以拿到服务的引用来调用相关方法。
  • 这时客户端拿到上面bindService获取服务端的引用:\color{#34a853}{由于Binder 是通过调用时将内存变化同步给被调用方,从而实现的跨进程通信。所以此引用非彼引用}通过这个引用\color{#4285f4}{调}\color{#ea4335}{用}\color{#fbbc05}{.add(a,b)}\color{#4285f4}{方}\color{#34a853}{法}\color{#ea4335}{的}流程如下

编写AIDL文件一些注意事项

举例

  1. 新建com.a.bean.Person类,并实现Parcelable的 ,java文件Person.java
// Person.java
package com.a.bean;
public class Person implements Parcelable {...}
  1. 编写aidl接⼝文件,Person.aidl
// Person.aidl
package com.a.bean;
parcelable Person;
  1. 编写使用Person bean的aidl文件,PersonAidl.aidl
import com.a.bean.Person;
interface PersonAidl {
 void addPerson(in Person person);
 List<Person> getPersonList();
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。