Android中的通信机制有大概如下几种:序列化机制(Serializable/Parceable)/Binder/Bundle/文件共享/AIDL/Messager/ContentProvider/Socket等...这篇文章主要讲AIDL的简单实用。
AIDL是跨进程通信的一种实现方式,那么这里最少也要两个进程的角色才能够使用跨进程通信吧。那么接下将分成两个角色来说明使用步骤
服务端进程:
①:创建AIDL文件,有两种创建的方式,new/AIDL文件,或者创建接口然后吧文件的后缀改成aidl,把修饰符去掉,之后可以rebuild项目检查一下app/genreated/source/包名/debug/ 下有没有成功生成aidl的java文件。
②:在接口中自定义方法。
③:创建Service,创建AIDL接口的子类作为内部类(class Mabinder extends AIDLbigname.Stub{重写方法}),然后再onBind()方法中返回该内部类的对象。
④:最后在清单文件中,注册服务:其中注意加上export:true,action:android:name="myservice"(这里也要根据绑定的方式来选择的)
客户端进程:
①:将服务端的AIDL文件拷贝到main文件夹下。(包名要求与服务端的一致)
②:重建一下项目检查一下java文件是否构建成功
③:绑定服务,获取aidl接口实例。
intent = new Intent("myservice");
conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myaidl2 = myaidl.Stub.asInterface(service);
Log.d("bigname_log", "onServiceConnected: " + myaidl2);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
bindService(intent, conn, BIND_AUTO_CREATE);
留意一下onServiceConnected()方法的执行时间,这貌似是在onCreated()方法执行后采取执行的,所以你在onCreated方法中去使用myaidl2的变量是他还是一个null。