在Android中,当两个类都在同一个进程里执行时,两者之间的沟通,只要采取一般的函数调用(Function Call)就行了,既快速又方便。一旦两个类分别在不同的进程里执行时,两者之间的沟通,就不能采取一般的函数调用途径了。只好采取IPC沟通途径。 Android框架的IPC沟通仰赖单一的IBinder接口。此时Client端调用IBinder接口的transact()函数,透过IPC机制而调用到远方(Remote)的onTransact()函数。此时的onTransact()函数是Binder类中的函数,之所以transact()能执行到远方的onTransact(),原因是因为Binder实现了IBinder接口,Binder类复写的transact()函数内部调用了自己定义的onTransact()函数。 下面不用aidl,纯Binder来实现一次进程间的通信。
服务端实现:
首先定义一个接口:
接口定义两个方法,加法和减法。
public interface IEthan {
int getAdd(int i,int j);
int getminus(int i,int j);
}
下面是主角MyBinder类
public class MyBinder extends Binder implements IEthan {
@Override
protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
throws RemoteException {
switch (code) {
//code为客户端Transact发送过来的code
case 0:
int ii[] = { 0, 0 };//此处数组长度必须和客户端发来的数组长度一致,不然报错
data.readIntArray(ii);//获取从客户端发来的int数组,对应的getAdd中的I和j
int add = getAdd(ii[0], ii[1</