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
原创粉丝点击