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() {@Overridepublic void cleanDisk(ICleanDiskCallBack cb) throws RemoteException {iCleanDiskCallBack = cb;}};

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

Client 端错误实现:

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

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

Client 端正确实现:

            //清理存储FridgeLauncherHelper.getInstance().cleanDisk(new ICleanDiskCallBack.Stub() {@Overridepublic 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

Android aidl 正确使用 callback的方式相关推荐

  1. 猿创征文 | Android AIDL 学习笔记——学以致用

    文章目录 Android AIDL 跨进程通信 AIDL文件 AIDL语法 数据类型 关键字 引用 指定方法ID 总结 实现接口 获取AIDL对象 捕获异常 创建Parcelable对象 带Bundl ...

  2. ANDROID AIDL 1

    也可参考:http://buaadallas.blog.51cto.com/399160/372090 的Android AIDL(Android Interface Definition Langu ...

  3. (转载)你真的理解Android AIDL中的in,out,inout么?

    前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了--或者并没有,但所占篇幅甚小,且基本上都是 ...

  4. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. Android AIDL使用介绍(3) 浅说AIDL背后的Binder

    1.背景 在前面的博客中,我们已经学会了使用AIDL进行跨进程通信,AIDL的使用比较简单,可实际上跨进程通信是一个相当复杂的过程,例如进程A是怎么找到进程B的,如果有一个进程C冒充进程A,进程B又该 ...

  6. android http协议添加Authorization认证方式

      今天,简单讲讲android里如何使用http请求时在头部添加Authorization认证方式. 其实也很简单,之前需要做一个功能,在android去使用http访问设备,但是每次的访问 ...

  7. Android数据的四种存储方式

    很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...

  8. [转][Android]Android数据的四种存储方式

    android.database.sqlite 类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBui ...

  9. Android AIDL使用详解

    一.概述 AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来 ...

最新文章

  1. [译]php和curl_multi_exec
  2. html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div
  3. 两个特征是独立好还是正相关好_stata速学|相关分析|主成分分析|因子分析
  4. js实现kmp算法_字符串匹配算法KMP算法
  5. 好用到让设计师尖叫的UI设计网格素材
  6. 手把手:教你如何用深度学习模型预测加密货币价格
  7. sendmail配置
  8. WPF的TextBox产生内存泄露的情况
  9. Android 8.1 SystemUI之状态栏、下拉菜单通知、导航栏分析(一)
  10. 浅谈Linux操作系统基础知识
  11. Winform开发技术详解 - 应用环境 相关技术介绍
  12. verlay虚拟化技术_Overlay解决虚拟化难题 - 节点动态 - 海南师范大学信息网络与数据中心| Network Center HaiNan Normal University...
  13. 微软服务器系统版本有几个,windows系统有几个版本
  14. 泰康和百度智能云为何相互需要?
  15. 使用SendCloud API来制作发送邮件的插件
  16. STM32两轮自平衡小车(学习记录)——MPU6050
  17. matlab定义未知大小矩阵,MATLAB中未知长度的矩阵?
  18. WINCE 睡眠与唤醒
  19. 2021计算机专业复试总结2
  20. matlab 串口实时接收数据 绘图

热门文章

  1. 堆栈的栈顶和栈底在哪_【c# .net】堆栈(Stack)
  2. matlab如何截取图像的中间部分_利用matlab提取并分割RGB图像中的某一个已知像素值的图像...
  3. gradient设置上下渐变_iOS 绘制渐变·实例篇
  4. opencv自定义角点检测
  5. python开发环境配置config_manjaro与python开发环境配置
  6. html选择器_HTML的id选择器类选择器
  7. python网页数据存入数据库_python网络爬虫抓取动态网页并将数据存入数据库MySQL...
  8. OARCLE11G的密码管理
  9. 《JavaScript面向对象精要》——1.8 原始封装类型
  10. ubuntu 16.04 更新后搜狗输入法无法输入中文的问题