Bindler机制传输接口

原创
2019/07/12 16:28
阅读数 129

创建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;
    }

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部