android 中aidl
来源:互联网 发布:哪个软件有汉仪丫丫体 编辑:程序博客网 时间:2024/04/30 19:57
客户端与服务端通信是通过Binder;
aidl 方便的定义了通信的格式;
通过aidl文件生成的的java文件
例如:
aidl文件:
// IRemoteSer.aidl package com.example.myapplication; // Declare any non-default types here with import statements interface IRemoteSer { /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); String test(int i, String m); void play(); }
生成的java文件:
package com.example.myapplication;// Declare any non-default types here with import statementspublic interface IRemoteSer extends android.os.IInterface{/** Local-side IPC implementation stub class. */public static abstract class Stub extends android.os.Binder implements com.example.myapplication.IRemoteSer{private static final java.lang.String DESCRIPTOR = "com.example.myapplication.IRemoteSer";/** Construct the stub at attach it to the interface. */public Stub(){this.attachInterface(this, DESCRIPTOR);}/** * Cast an IBinder object into an com.example.myapplication.IRemoteSer interface, * generating a proxy if needed. */public static com.example.myapplication.IRemoteSer asInterface(android.os.IBinder obj){if ((obj==null)) {return null;}android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);if (((iin!=null)&&(iin instanceof com.example.myapplication.IRemoteSer))) {return ((com.example.myapplication.IRemoteSer)iin);}return new com.example.myapplication.IRemoteSer.Stub.Proxy(obj);}@Override public android.os.IBinder asBinder(){return this;}@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException{switch (code){case INTERFACE_TRANSACTION:{reply.writeString(DESCRIPTOR);return true;}case TRANSACTION_basicTypes:{data.enforceInterface(DESCRIPTOR);int _arg0;_arg0 = data.readInt();long _arg1;_arg1 = data.readLong();boolean _arg2;_arg2 = (0!=data.readInt());float _arg3;_arg3 = data.readFloat();double _arg4;_arg4 = data.readDouble();java.lang.String _arg5;_arg5 = data.readString();this.basicTypes(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5);reply.writeNoException();return true;}case TRANSACTION_test:{data.enforceInterface(DESCRIPTOR);int _arg0;_arg0 = data.readInt();java.lang.String _arg1;_arg1 = data.readString();java.lang.String _result = this.test(_arg0, _arg1);reply.writeNoException();reply.writeString(_result);return true;}case TRANSACTION_play:{data.enforceInterface(DESCRIPTOR);this.play();reply.writeNoException();return true;}}return super.onTransact(code, data, reply, flags);}private static class Proxy implements com.example.myapplication.IRemoteSer{private android.os.IBinder mRemote;Proxy(android.os.IBinder remote){mRemote = remote;}@Override public android.os.IBinder asBinder(){return mRemote;}public java.lang.String getInterfaceDescriptor(){return DESCRIPTOR;}/** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */@Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, java.lang.String aString) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeInt(anInt);_data.writeLong(aLong);_data.writeInt(((aBoolean)?(1):(0)));_data.writeFloat(aFloat);_data.writeDouble(aDouble);_data.writeString(aString);mRemote.transact(Stub.TRANSACTION_basicTypes, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}@Override public java.lang.String test(int i, java.lang.String m) throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.lang.String _result;try {_data.writeInterfaceToken(DESCRIPTOR);_data.writeInt(i);_data.writeString(m);mRemote.transact(Stub.TRANSACTION_test, _data, _reply, 0);_reply.readException();_result = _reply.readString();}finally {_reply.recycle();_data.recycle();}return _result;}@Override public void play() throws android.os.RemoteException{android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_play, _data, _reply, 0);_reply.readException();}finally {_reply.recycle();_data.recycle();}}}static final int TRANSACTION_basicTypes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);static final int TRANSACTION_test = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);static final int TRANSACTION_play = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);}/** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, java.lang.String aString) throws android.os.RemoteException;public java.lang.String test(int i, java.lang.String m) throws android.os.RemoteException;public void play() throws android.os.RemoteException;}
内部抽象类Stub 对协议格式进行了实现; Stub.Proxy是客户端调用服务端方法的代理,通过transact方法实现;
服务端继承Stub实现IRemoteServce接口; 客户端拿到Binder ,
new com.example.myapplication.IRemoteSer.Stub.Proxy(obj)
这个Binder是绑定到远程服务端的, 通过上面代理类进行数据传输;
下面是 messager的应用:
http://blog.csdn.net/lmj623565791/article/details/47017485;
messager跨进程使用handler;
0 0
- android中AIDL
- android中使用AIDL
- android中AIDL
- Android中aidl基础
- Android中AIDL
- Android中AIDL详解
- android 中aidl
- Android中AIDL简介
- android中AIDL简介
- android中aidl的使用
- Android中AIDL使用例子
- Android中AIDL使用例子
- Android中AIDL使用例子
- Android中AIDL使用例子
- Android中AIDL使用例子
- Android中AIDL使用例子
- Android中AIDL使用例子
- Android中AIDL使用例子
- npm使用介绍
- 计算机网络——运输层
- 搭建vs2010 boost开发环境
- Spring Security 4 退出 示例(带源码)
- 编写高质量的代码——从命名入手
- android 中aidl
- Tomcat启动报 unrecognized windows sockets error: 0: JVM_Bind解决方法
- py2exe打包Python程序
- 《java入门第一季》之面向对象面试题
- 大数据学习资源汇总
- 设计模式之Strategy模式(策略模式)
- 定时清理日志
- POJ 2393-Yogurt factory(贪心)
- 读《Spring技术内幕》-总结3-IoC容器的初始化过程