Android aidl 正确使用 callback的方式

AIDL文件

1.callBack接口:

interface ICleanDiskCallBack{
    void onComplete();

}

该接口设计的目的是,当一个进程完成清理工作后,回调给另外一个进程,好让他做后面的事情。

2.服务aidl

 import com.xxx.ICleanDiskCallBack;

interface IFridgeLauncher {
     void cleanDisk(ICleanDiskCallBack cb);
}

该aidl为Server端实现,设计的意思是,暴露给其他的进程,调用清理的方法。

Server端实现:

    IFridgeLauncher.Stub iFridgeLauncher = new IFridgeLauncher.Stub() {
         @Override
        public void cleanDisk(ICleanDiskCallBack cb) throws RemoteException {
            iCleanDiskCallBack = cb;
             }

    };

Client端错误的实现,iCleanDiskCallBack 这里拿到的就会是null

Client 端错误实现:

            //清理存储
            FridgeLauncherHelper.getInstance().cleanDisk(new ICleanDiskCallBack() {
                @Override
                public void onComplete() throws RemoteException {
                    //清理存储之后空间还不够 那么报错
                    if (FileUtils.getSDAvailaleSize() < mDownloadInfo.size) {
                        for (TaskCB taskCB : taskCBS) {
                            taskCB.onDownloadError(mDownloadInfo,-1);
                        }
                        mStart =false;
                    }else {
                        download();
                    }
                }

                @Override
                public IBinder asBinder() {
                    return null;
                }
            });
            return;
        }
        download();

我们这里asBindler返回空,就会导致Server端拿不到你传递过去的CallBack.

Client 端正确实现:

            //清理存储
            FridgeLauncherHelper.getInstance().cleanDisk(new ICleanDiskCallBack.Stub() {
                @Override
                public void onComplete() throws RemoteException {
                    //清理存储之后空间还不够 那么报错
                    if (FileUtils.getSDAvailaleSize() < mDownloadInfo.size) {
                        for (TaskCB taskCB : taskCBS) {
                            taskCB.onDownloadError(mDownloadInfo,-1);
                        }
                        mStart =false;
                    }else {
                        download();
                    }
                }
            });

我们的CallBack需要实现Stub接口就可以让Server端拿到。

这个是什么原因,还需要深入了解Android Binder

参考:https://blog.csdn.net/qq_31877171/article/details/104959668

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值