/********************************************************************************
* Android AIDL自动生成Java文件测试
* 说明:
* 知道有aidl这东西已经挺久了,但是一直没有花时间来系统了解一下其工作机制,现在
* 花点时间一点一点验证一下其功能。
*
* 2016-5-8 深圳 南山平山村 曾剑锋
*******************************************************************************/ 一、参考文章:
. Android AIDL使用详解
http://blog.csdn.net/stonecao/article/details/6425019
. android进程间通信:使用AIDL
http://blog.csdn.net/saintswordsman/article/details/5130947 二、cat forService.aidl
package com.example.aidltest.aidl; import com.example.aidltest.aidl.forActivity; interface forService {
void registerTestCall(forActivity cb);
void invokCallBack();
} 三、cat forService.java
/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: D:\\soft\\Android\\workspace\\AidlTest\\src\\com\\example\\aidltest\\aidl\\forService.aidl
*/
package com.example.aidltest.aidl; // 继承了android.os.IInterface接口
public interface forService extends android.os.IInterface {
/** Local-side IPC implementation stub class. */
// Stub类继承了Binder,并继承我们在aidl文件中定义的接口
public static abstract class Stub extends android.os.Binder implements
com.example.aidltest.aidl.forService {
private static final java.lang.String DESCRIPTOR = "com.example.aidltest.aidl.forService"; /** Construct the stub at attach it to the interface. */
public Stub() {
this.attachInterface(this, DESCRIPTOR);
} /**
* Cast an IBinder object into an com.example.aidltest.aidl.forService
* interface, generating a proxy if needed.
*/
// 在使用的时候经常会看到这一部分的内容
public static com.example.aidltest.aidl.forService asInterface(
android.os.IBinder obj) {
if ((obj == null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin != null) && (iin instanceof com.example.aidltest.aidl.forService))) {
return ((com.example.aidltest.aidl.forService) iin);
}
return new com.example.aidltest.aidl.forService.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_registerTestCall: {
data.enforceInterface(DESCRIPTOR);
com.example.aidltest.aidl.forActivity _arg0;
_arg0 = com.example.aidltest.aidl.forActivity.Stub
.asInterface(data.readStrongBinder());
this.registerTestCall(_arg0);
reply.writeNoException();
return true;
}
case TRANSACTION_invokCallBack: {
data.enforceInterface(DESCRIPTOR);
this.invokCallBack();
reply.writeNoException();
return true;
}
}
return super.onTransact(code, data, reply, flags);
} private static class Proxy implements
com.example.aidltest.aidl.forService {
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;
} @Override
public void registerTestCall(
com.example.aidltest.aidl.forActivity cb)
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.writeStrongBinder((((cb != null)) ? (cb.asBinder())
: (null)));
mRemote.transact(Stub.TRANSACTION_registerTestCall, _data,
_reply, );
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
} @Override
public void invokCallBack() 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_invokCallBack, _data,
_reply, );
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}
} static final int TRANSACTION_registerTestCall = (android.os.IBinder.FIRST_CALL_TRANSACTION + );
static final int TRANSACTION_invokCallBack = (android.os.IBinder.FIRST_CALL_TRANSACTION + );
} // AIDL中自定义的方法,没有实现
public void registerTestCall(com.example.aidltest.aidl.forActivity cb)
throws android.os.RemoteException; public void invokCallBack() throws android.os.RemoteException;
} 四、cat MainActivity.java
public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
......
new forService.Stub() { @Override
public void registerTestCall(forActivity cb) throws RemoteException {
// TODO Auto-generated method stub } @Override
public void invokCallBack() throws RemoteException {
// TODO Auto-generated method stub }
};
......
}
}

Android AIDL自动生成Java文件测试的更多相关文章

  1. eclipse下Android无法自动生成apk文件怎么办?

    eclipse下Android无法自动生成apk文件怎么办? 现象:创建android工程后,通过手动build/clean或自动build均无法在bin文件夹下生成.apk文件 解决方法:进入win ...

  2. 一键自动生成 java junit 测试代码神器 gen-test-plugin 入门介绍

    gen-test-plugin 我们日常编写代码的过程中,经常需要为代码编写测试案例. 随着对代码质量的要求越来越高,很多公司开始通过代码的测试覆盖率作为 QA 的一个评定指标. 本框架可以一键生成所 ...

  3. Android Studio 自动生成 Java Doc

    Android Studio 生成 Java Doc 出现"编码GBK的不可映射字符"问题 错误的解决方案,复制粘贴一万遍也是错误的,下面是查找出来的,没有用的解决方案(还有几个, ...

  4. 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件

    根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...

  5. java自动生成entity文件

    网上关于自动生成entity文件的代码很多,看了很多代码后,在先辈们的基础上再完善一些功能(指定多个表,全部表). 为了使用方便所以把两个类写在一个java文件中,所以大家可以直接拿这个java文件, ...

  6. 新版本ADT创建Android项目无法自动生成R文件解决办法

    本人使用的是ADT是Version 23.0.2,支持Android 6.0之后的系统环境,最高版本23,在创建Android项目的时候,每次创建项目选择“Compile With”低于6.0版本的时 ...

  7. php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正“办事”的那个,提供一种办事接口的统称. ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类

    笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类     简介:实战使用IDE根据Mysql自动生成java pojo实体类                  1.IDEA连接数 ...

  9. Eclipse不自动编译java文件的终极解决方案

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...

随机推荐

  1. Understanding node.js

    Node.js has generally caused two reactions in people I've introduced it to. Basically people either ...

  2. 一个简单的ObjC和JavaScript交互工具

    https://github.com/changjianfeishui/XBWebBridge ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只 ...

  3. JLINK固件,JLINK驱动和JLINK硬件版本之间的关系,以及固件升级方法

    初学者容易在这几个问题上面犯迷糊,这里简单的说说.   1. JLINK硬件版本首先说JLINK的硬件版本有V7,V8和V9,相信这一点大家应该都没问题,那怎么看自己手头的JLINK是哪个硬件版本呢, ...

  4. VC高手们的博客

    http://www.cnblogs.com/killmyday/tag/Debug/ (关于符号调试等内容比较多)

  5. 当前主流的安卓APP开发IDE

    什么是主流的开发安卓APP的方式? 我是去年4月份接触的Android开发,因此特别有感触,可以明显的感受到安卓APP主流开发方式的改变. 去年,2015年年初,各大安卓开发群大部分大牛在用Eclip ...

  6. Win8.1安装VirtualSVN Server发生service visualSVN Server failed to start解决办法

    Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for mo ...

  7. CodeBlocks ubuntu常见问题及小技巧

    1.安装完后没有快捷键的设置: http://blog.csdn.net/sjwbcb/article/details/4797785 感谢这哥,原来是包没有装全. codeblocks用ubuntu ...

  8. 预编译头文件 StdAfx.h

    预编译头文件: 最常见的使用场景就是 StdAfx.h 文件,在这个文件中包含常用的头文件,比如windows.h,cstdio,string,别的 .cpp 文件去包含 StdAfx.h 头文件.编 ...

  9. SQL Server ->> Msg 7411, Level 16, State 1, Line 1 -- Server 'XXXX' is not configured for RPC.

    关于问题,有两个相关的服务器选项. exec sp_serveroption @server='CIA-SH-SVR-SIS', @optname='rpc', @optvalue='true' ex ...

  10. Effective C++条款01: 视C++为一个语言联邦

    一开始C++定义为:C with Classes. 如今的C++已经是一个多重范型编程语言,可以把C++视为有四个次语言组成的联邦语言. C.C++任然以C为基础.区块.语句.预处理.内置语言类型.数 ...