关于Binder,我就不解释的太多了,网上一搜资料一堆,但是估计还是很多人理解的有困难。今天就教你如何从 app层面来理解好Binder。
其实就从我们普通app开发者的角度来看,仅仅对于android应用层的话,Binder就是客户端和服务端进行通信的媒介。
AIDL就是我们理解Binder 最好的事例。
我们都知道 我们写好aidl 文件以后,开发工具 会自动帮我们生成好代码。实际上 我们最终apk里面 是只有这些代码的,我们写的aidl文件
是不会被打包进去的,也就是说aidl文件 实际上 就是我们用来 生成 实际binder代码用的。所以 我们只要能够分析好,ide自动帮我们生成的
代码,就可以自己手写binder,从而在app层面上真正理解binder的用法和含义 以及原理。
首先我先来定义一个实体类:Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package com.example.administrator.writebindercodeexample; import android.os.Parcel; import android.os.Parcelable; /** * Created by Administrator on 2016/1/27. */ public class Person implements Parcelable { private String name; public void setName(String name) { this.name = name; } public void setGender(int gender) { this.gender = gender; } public int getGender() { return gender; } public String getName() { return name; } private int gender; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); dest.writeInt(this.gender); } public Person() { } protected Person(Parcel in) { this.name = in.readString(); this.gender = in.readInt(); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { public Person createFromParcel(Parcel source) { return new Person(source); } public Person[] newArray(int size) { return new Person[size]; } }; } |
注意看 我们这个person 类 是实现了android自带的序列化接口的,所以 如果你要在aidl里使用这个类,那你必须要额外在aidl里生命下 这个类。
1 2 3 4 5 |
// Person.aidl.aidl package com.example.administrator.writebindercodeexample; // Declare any non-default types here with import statements parcelable Person; |
1 2 3 4 5 6 7 8 9 10 |
// IPersonManager.aidl package com.example.administrator. AIDL就是我们理解Binder 最好的事例。 我们都知道 我们写好aidl 文件以后,开发工具 会自动帮我们生成好代码。实际上 我们最终apk里面 是只有这些代码的,我们写的aidl文件 是不会被打包进去的,也就是说aidl文件 实际上 就是我们用来 生成 实际binder代码用的。所以 我们只要能够分析好,ide自动帮我们生成的 代码,就可以自己手写binder,从而在app层面上真正理解binder的用法和含义 以及原理。 首先我先来定义一个实体类:Person.java
注意看 我们这个person 类 是实现了android自带的序列化接口的,所以 如果你要在aidl里使用这个类,那你必须要额外在aidl里生命下 这个类。
|