线程之间的通信可以使用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);