创建aidl接口
创建监听接口IOnNerBookArrivedListener.aidl
添加一个回调方法onNewBookArrived,服务端有新书回调的方法。
interface IOnNeeBookArrivedListener {
void onNewBookArrived(Book book);
}
修改IBookManager.aidl
添加注册监听以及取消监听方法。
interface IBookManager {
List<Book> getBookList();
void addBook(in Book book);
void registerListener(IOnNeeBookArrivedListener listener);
void unregisterListener(IOnNeeBookArrivedListener listener);
}
Build生成IBookManger.java
注册监听以及取消监听方法的具体实现
@Override
public void registenerListener(com.moreunion.study.IOnNeeBookArrivedListener listener) throws android.os.RemoteException {
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
//Binder对象写入内存(Parcel)中
_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));
//跨进程的方法transact
mRemote.transact(Stub.TRANSACTION_registenerListener, _data, _reply, 0);
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}
@Override
public void unregistenerListener(com.moreunion.study.IOnNeeBookArrivedListener listener) throws android.os.RemoteException {
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeStrongBinder((((listener!=null))?(listener.asBinder()):(null)));
mRemote.transact(Stub.TRANSACTION_unregistenerListener, _data, _reply, 0);
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}
客户端实现IOnNewBookArrivedListener接口
private IOnNewBookArrivedListener mOnNewBookArrivedListener = new IOnNewBookArrivedListener.Study(){
public void onNewBookArrived() throws RemoteException {
//待操作的
}
}
通过Binder的transact方法来转换客户端线程与服务端线程调用。
调用服务端的onTransact()方法
@Override
public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {
case TRANSACTION_registerListener: {
data.enforceInterface(descriptor);
com.moreunion.study.book.IOnNeedBookArrivedListener _arg0;
_arg0 = com.moreunion.study.book.IOnNeedBookArrivedListener.Stub.asInterface(data.readStrongBinder());
this.registerListener(_arg0);
reply.writeNoException();
return true;
}
case TRANSACTION_unregisterListener: {
data.enforceInterface(descriptor);
com.moreunion.study.book.IOnNeedBookArrivedListener _arg0;
_arg0 = com.moreunion.study.book.IOnNeedBookArrivedListener.Stub.asInterface(data.readStrongBinder());
this.unregisterListener(_arg0);
reply.writeNoException();
return true;
}