【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/
Remote Service在之前的学习笔记 Android学习笔记(五三):服务Service(下)- Remote Service中介绍过。远程服允许行其他应用调用,及允许RPC(remote procedure call)。在Android中remote需要通过ADIL(Android interface definition Language)定义开放给client的接口。建立远程服务需要一下步骤:
1、编写AIDL文件来定义向client开放的接口,并将AIDL文件加到项目src/目录下。
2、实现service,在onBind()中返回接口
3、在AndroidManifest.xml中配置service。
在AIDL中定义服务接口
我们将通过一个简单小例子也学习。例子很简单,远程服务模拟股指报价,给出请求,回复股价。我们将是src/目录下,即在我们增加java code的地方,加入一个IStockQuoteSerice.aidl文件,AIDL文件采用java语法,文件中的包名就是项目的包名。
package cn.wei.flowingflying.proandroidservice;
interface IStockQuoteService{
double getQuote(String ticker);
}
根据AIDL文件自动生成接口代码
在编译之后,系统会根据aidl文件生成相应的IStockQuoteService.java文件,将接口以java的方式表达出来。Android对于一些复杂的接口,为了开发者使用便捷,自动生成相应的java文件。

我们来看看自动生成的接口文件IStockQuoteService.java。自动生成代码的缩退没有那么好看,利用eclipse的聚合功能,IStockQuoteService中含有两部分,一个是class stub,另一个是我们在aidl中定义的接口函数getQuote()。

/* 根据我们在aidl文件中对接口interface IStockQuoteService{}的定义,自动生成接口代码IStockQuoteService
* This file is auto-generated. DO NOT MODIFY.
* Original file: ...\\src\\cn\\wei\\flowingflying\\proandroidservice\\IStockQuoteService.aidl
*/
package cn.wei.flowingflying.proandroidservice;/*这就是为何aidl中的package名字要和project的一致*/
public interface IStockQuoteService extends android.os.IInterface
{
/** 有一个抽象类Stub集成Binder,而同时实现IStockQuoteService。Stub在远程服务中很关键,当client连接server,即bindService()时,server返回一个Stub对象,由于stub实现接口,client可以通过这个对象来访问接口.Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements cn.wei.flowingflying.proandroidservice.IStockQuoteService
{
private static final java.lang.String DESCRIPTOR = "cn.wei.flowingflying.proandroidservice.IStockQuoteService";
/** Construct the stub at attach it to the interface. */
public Stub() { ... ...}
/** Cast an IBinder object into an cn.wei.flowingflying.proandroidservice.IStockQuoteService interface, generating a proxy if needed. */
public static cn.wei.flowingflying.proandroidservice.IStockQuoteService asInterface(android.os.IBinder obj) { … … }
@Override public android.os.IBinder asBinder() { … … }
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { … … }
/* Proxy是Stub的内部类,实现IStockQuoteService接口,对接口中的getQuote()做了具体的实现*/
private static class Proxy implements cn.wei.flowingflying.proandroidservice.IStockQuoteService
{
… …
/*这是在class stub中对getQuote()的实现,具体的代码没看懂,可以理解为service和stub之间对getQuote()的结果的传递,可得到service的getQuote()的结果*/
@Override public double getQuote(java.lang.String ticker) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
double _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeString(ticker);
mRemote.transact(Stub.TRANSACTION_getQuote, _data, _reply, 0);
_reply.readException();
_result = _reply.readDouble();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
}
static final int TRANSACTION_getQuote = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
}
public double getQuote(java.lang.String ticker) throws android.os.RemoteException;
}
本笔记涉及的例子代码,可以在Pro Android学习:Android service小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件的更多相关文章
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务
目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
- 【转】 Pro Android学习笔记(八九):了解Handler(3):延迟执行小例子
目录(?)[-] 小例子 Handler的处理 Activity的代码片段 后台线程和UI的互动 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://b ...
- 【转】 Pro Android学习笔记(八六):了解Package(5):使用lib
目录(?)[-] 在项目中使用lib 源代码 了解一些机制 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowin ...
- 【转】 Pro Android学习笔记(八四):了解Package(3):包间数据共享
目录(?)[-] 共享User ID的设置 共享资源例子 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- 【转】 Pro Android学习笔记(八五):了解Package(4):lib项目
目录(?)[-] 什么是lib项目 小例子 Lib的实现 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- 【转】 Pro Android学习笔记(八七):了解Handler(1):组件和线程
目录(?)[-] 主线程消息队列和线程池 查看线程信息 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingf ...
- 【转】 Pro Android学习笔记(八三):了解Package(2):包签名过程
目录(?)[-] 类比例子 数字签名 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在W ...
- 【转】Pro Android学习笔记(八):了解Content Provider(下中)
在之前提供了小例子BookProvider,我们回过头看看如何将通过该Content Provider进行数据的读取. (1)增加 private void addBook(String name , ...
随机推荐
- 【bzoj2118&洛谷P2371】墨墨的等式(最短路神仙题)
题目传送门:bzoj2118 洛谷P2371 这道题看了题解后才会的..果然是国家集训队的神仙题,思维独特. 首先若方程$ \sum_{i=1}^{n}a_ix_i=k $有非负整数解,那么显然对于每 ...
- matlab学习笔记,图像分块
clc; clear all; close all; I = imread('E:\matlab\files-images\tomsen512.jpg'); rs = size(I, 1);% 行数c ...
- POJ2741 Colored Cubes
Description There are several colored cubes. All of them are of the same size but they may be colore ...
- 在Windows下使用adb logcat grep
在Windows下使用adb logcat grep 会提示 因为grep 为Linux命令,所以不能使用.怎么办呢? 这时候可以用到babun 下载地址:http://babun.github.i ...
- JVM内存管理中的垃圾回收策略
JVM垃圾回收策略 1.静态内存分配和回收 编译时已经确定了内存空间大小,程序被加载后则一次性分配好内存空间.程序结束后,则对应栈帧撤销,分配的静态内存空间则被回收. 2.动态内存分配和回收 程序运行 ...
- 利用matplotlib中imshow()函数绘图
matplotlib 是Python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图 ...
- Windows平台下Qt QOpenGL中glutSolidSphere()方法未定义的解决方法
Windows平台下Qt中glut库的使用 用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是 ...
- 【codesmith】 初次试用(未发布)
一直都有听过codesmith,一个很好用的软件,减少大量代码的输入,比如你生成一个list,并添加5个项. ArrayList list1=new ArrayList(); list1.Add( ...
- The tag handler class for "home.jsp" (org.apache.taglibs.standard.tag.rt.core.ForEachTag) was not found on the Java Build Path
web.xml中 listener,filter,servlet需按顺序. <listener> <listener-class>listener.VisitCountList ...
- Oracle Index Clustering Factor(集群因子)
一.本文说明: 今天在做测试的时候发现字段上有索引,但是执行计划就是不走索引,经过在网上查找才发现原来是索引的集群因子过高导致的.本文属于转载 二.官网说明 The index clustering ...