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() {@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的方式相关推荐
- 猿创征文 | Android AIDL 学习笔记——学以致用
文章目录 Android AIDL 跨进程通信 AIDL文件 AIDL语法 数据类型 关键字 引用 指定方法ID 总结 实现接口 获取AIDL对象 捕获异常 创建Parcelable对象 带Bundl ...
- ANDROID AIDL 1
也可参考:http://buaadallas.blog.51cto.com/399160/372090 的Android AIDL(Android Interface Definition Langu ...
- (转载)你真的理解Android AIDL中的in,out,inout么?
前言 这其实是一个很小的知识点,大部分人在使用AIDL的过程中也基本没有因为这个出现过错误,正因为它小,所以在大部分的网上关于AIDL的文章中,它都被忽视了--或者并没有,但所占篇幅甚小,且基本上都是 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android AIDL使用介绍(3) 浅说AIDL背后的Binder
1.背景 在前面的博客中,我们已经学会了使用AIDL进行跨进程通信,AIDL的使用比较简单,可实际上跨进程通信是一个相当复杂的过程,例如进程A是怎么找到进程B的,如果有一个进程C冒充进程A,进程B又该 ...
- android http协议添加Authorization认证方式
今天,简单讲讲android里如何使用http请求时在头部添加Authorization认证方式. 其实也很简单,之前需要做一个功能,在android去使用http访问设备,但是每次的访问 ...
- Android数据的四种存储方式
很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...
- [转][Android]Android数据的四种存储方式
android.database.sqlite 类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBui ...
- Android AIDL使用详解
一.概述 AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来 ...
最新文章
- [译]php和curl_multi_exec
- html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div
- 两个特征是独立好还是正相关好_stata速学|相关分析|主成分分析|因子分析
- js实现kmp算法_字符串匹配算法KMP算法
- 好用到让设计师尖叫的UI设计网格素材
- 手把手:教你如何用深度学习模型预测加密货币价格
- sendmail配置
- WPF的TextBox产生内存泄露的情况
- Android 8.1 SystemUI之状态栏、下拉菜单通知、导航栏分析(一)
- 浅谈Linux操作系统基础知识
- Winform开发技术详解 - 应用环境 相关技术介绍
- verlay虚拟化技术_Overlay解决虚拟化难题 - 节点动态 - 海南师范大学信息网络与数据中心| Network Center HaiNan Normal University...
- 微软服务器系统版本有几个,windows系统有几个版本
- 泰康和百度智能云为何相互需要?
- 使用SendCloud API来制作发送邮件的插件
- STM32两轮自平衡小车(学习记录)——MPU6050
- matlab定义未知大小矩阵,MATLAB中未知长度的矩阵?
- WINCE 睡眠与唤醒
- 2021计算机专业复试总结2
- matlab 串口实时接收数据 绘图
热门文章
- 堆栈的栈顶和栈底在哪_【c# .net】堆栈(Stack)
- matlab如何截取图像的中间部分_利用matlab提取并分割RGB图像中的某一个已知像素值的图像...
- gradient设置上下渐变_iOS 绘制渐变·实例篇
- opencv自定义角点检测
- python开发环境配置config_manjaro与python开发环境配置
- html选择器_HTML的id选择器类选择器
- python网页数据存入数据库_python网络爬虫抓取动态网页并将数据存入数据库MySQL...
- OARCLE11G的密码管理
- 《JavaScript面向对象精要》——1.8 原始封装类型
- ubuntu 16.04 更新后搜狗输入法无法输入中文的问题