Android——AIDL进程通信记录(基本类型数据)

线程之间的通信可以使用handler进行;进程之间的通信有很多,比如广播,内容提供者,简单记录一下AIDL的使用;比如我在app A 中想要获取 app B 中的函数;

AIDL可以传递的数据类型有:8大基本数据类型 , 引用数据类型(string ,CharSequence),集合(List,Map),自定义数据类型(需要实现 Android.os.Parcelable)

实现上面需求的思路:

1,app B中将函数封装到AIDL文件里面,并编译成java文件;主要是按照AIDL的规范来打包数据的

2,app B中创建远程server,可以给连接对象返回一个AIDL里面代理函数句柄

3,app A中通过建立与app B 中远程服务的连接获取该函数的句柄;前提是需要复制app B 中的AIDL文件

基本数据的实现

服务端:

1,创建AIDL文件

2,编译或者刷新一下自动生成AIDL文件的Java文件

3,创建远程server

客户端:(只要连接上服务就可以了)

Intent intent = new Intent();
intent.setAction("com.roi.audio2video.remote_server.ServerOne");  // 和服务端的action对应
intent.setPackage("com.roi.audio2video");                         // 服务端的包名
bindService(intent,new MyServiceConnection(),BIND_AUTO_CREATE);

private class MyServiceConnection implements ServiceConnection {

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        LogUtils.e("rrrrrrrr","连接上");
        iRemoteOne = IRemoteOne.Stub.asInterface(service);
        if (iRemoteOne != null)
        {
            LogUtils.e("rrrrrrrr","不为空");

        }else
        {

            LogUtils.e("rrrrrrrr","为空");
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
}

拿到句柄之后直接调用方法就可以了

int result = iRemoteOne.basicTypes(1,2);
 

猜你喜欢

转载自blog.csdn.net/qq_34601429/article/details/82621753