AIDL原理分析与使用
来源:互联网 发布:微信网络投票刷票软件 编辑:程序博客网 时间:2024/06/03 16:00
1为什么使用AIDL
Android系统中IPC是通过Binder机制实现的,Server启动之后注册到ServerManager中,Client需要与Server通信,则请求ServerManger返回Server对应的引用(其实就是一个handle),Client拿到这个handle就可以和Server进行通信,应用层实现进程间通信则必须通过Service组件,而AIDL则是应用层实现进程间通信一个辅助,是为了App Developer 更好的开发IPC应用,是辅助但是不是必须的。
2.不使用AIDL通信的例子
下面实现一个AIDL进行通信例子,具体过程为Client发送一个String给Server,Server加上时间戳返回给Client。
client代码
public void onServiceConnected(ComponentName name, IBinder service) { Parcel data = Parcel.obtain(); data.writeString("test"); Parcel reply = Parcel.obtain(); try { //第一个参数code client和server约定 最后一个参数0表示同步任务 service.transact(1, data, reply, 0); reply.readException(); String replyStr = reply.readString(); Log.d("lchj_aidl", "server:" + replyStr); } catch (RemoteException e) { e.printStackTrace(); } }
Server端代码
private static class TestBinder extends Binder { @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { //因为只是一种数据交换 这里不在switch code String clientString = data.readString(); if (TextUtils.isEmpty(clientString)) { return super.onTransact(code, data, reply, flags); } Log.d("lchj_aidl", "client:" + clientString); clientString += System.currentTimeMillis(); reply.writeNoException(); reply.writeString(clientString); return true; } }
运行结果:
3.AIDL生成文件分析
AIDL其实是SDK中提供一个工具,在build-tools目录下,它可以根据xxx.aidl文件生成一个xxx.java文件,该文件包含三个类,下面具体分析xxx.java生成的三个类。
aidl文件如下
interface ITestAidlInterface { void setStr(String str); String getStr();}
aidl文件基本用法和java基本一致,不在细说,使用AIDL工具可以生成一个ITestAidlInterface.java文件,该文件包含一个接口类,两个抽象类。他们关系如下
4AIDL使用
参考:
Android内核剖析 柯元旦
Android系统源代码情景分析 罗升阳
0 0
- AIDL原理分析与使用
- AIDL使用以及原理分析
- 深入分析AIDL原理
- 深入分析AIDL原理
- AIDL原理分析
- 【Android】深入分析AIDL原理
- Binder底层原理,aidl.java文件分析
- 从一个例子开始分析AIDL原理
- AIDL的理解与使用
- Android AIDL定义与使用
- Android:AIDL使用与详解
- 浅析AIDL的使用和工作原理
- aidl原理
- CloudFoundry之warden使用与原理分析
- 使用AIDL分析Binder的工作机制
- IPC机制分析和AIDL的使用
- IPC-AIDL的使用实例和分析
- AIDL使用入门, 客户端通过AIDL与服务端通信
- centos7下gitlab的搭建、备份与还原
- NSURLConnect的使用
- 安卓开发遇到的问题1--2016.3.17
- Ignatius and the Princess I
- 与电容有关的几点解惑
- AIDL原理分析与使用
- 关于动态规划的一点理解
- Android学习之数字选择器NumberPicker之修改字色字号分割线颜色
- 指针整数排序
- xshell链接跳转
- Lucene之建立索引以及根据索引查询
- ubuntu14.04在安装虚拟机VMware Tools-10.0时的编译问题
- 第61课:Spark SQL数据加载和保存内幕深度解密实战
- PB实现数据窗口动态分组