知道AIDL这个东西,android接口进程通讯语言,但是没有具体去看,google了一下,
初步了解了!记录,待以后后头看
AIDL步骤:
一般是服务端和客户端之间的进程通信。
1.分别新建两个android项目,一个为Service一个为Client
2.分别在两个项目中新建包,要求包名一致,然后在里面都创建
一个后缀为aidl的文件
如:
package com.zhb.aidl;
interface IPerson {
String talk(String someone);
}
3.在Service里面实现AIDL的方法
public class AIDLService extends Service {
private static final String TAG = "AIDLService";
//实现AIDL里面的方法
IPerson.Stub stub = new IPerson.Stub() {
@Override
public String talk(String someone) throws RemoteException {
Log.i(TAG, "talk() called");
return someone+"说";
}
};
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind() called");
return stub;
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "onUnbind() called");
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy() called");
}
}
4.回到Client当中,一:就是绑定Service 二:与服务相连
绑定服务就是
Intent intent = new Intent("android.intent.action.AIDLService");
bindService(intent, conn, Context.BIND_AUTO_CREATE);
与服务连接就是
private IPerson person;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onServiceDisconnected is called");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.i(TAG, "onServiceConnected called");
person = IPerson.Stub.asInterface(service);
}
};
此时就拿到了person,就可以调用服务里实现的AIDL接口里的talk方法
person.talk("哈哈");
目前在项目中用的比较少,貌似面试会问到,记录之,推荐一个博客写AIDL写得详细
嗯,就是这样子