Android系统中,各应用程序都运行在自己的进程中,进程之间无法直接进行数据交换。为了实现这种跨进程通信(interprocess communication,简称IPC),Android提供了AIDL Service

AIDL Service简介

Android的远程Service调用与java的RMI基本相似,一样都是先定义一个远程调用接口,然后为该接口提供一个实现类即可。客户访问Service时,Android并不是直接返回Service对象给客户端,而是通过onBind()方法返回一个IBinder类型的对象作为Service的代理对象给客户端。因此,AIDL远程接口的实现类就是IBinder的实现类。
与绑定本地Service不同的是,绑定本地Service,onBind会直接把IBinder的实现类传给客户端的ServiceConnection的onServiceConnected方法的第二个参数;而绑定远程Service则是将IBinder对象的代理传给ServiceConnection的onServiceConnected方法的第二个参数。
当客户端获取了远程service的IBinder对象的代理后,接下来就可以通过该IBinder对象去回调远程Service的属性或方法了。

实现步骤:

1、创建AIDL文件
Android需要AIDL(Android Interface Definition Language)来定义远程接口
利用Android studio创建AIDL接口后,会自动为接口生成实现(但是我用的Android Studio1.4在创建了.aidl文件后并没有自动生成.java文件,要run一遍项目后才会生成),生成的java文件在app\build\generated\source\aidl\debug\目录下

interface ICat {    /**     * Demonstrates some basic types that you can use as parameters     * and return values in AIDL.     */            String getColor();            double getWeight();}

自动生成的java文件中,有这样一个Stub类,它继承了android.os.Binder,所以Service的onBind方法可以将继承了Stub的类的对象传给客户端

public static abstract class Stub extends android.os.Binder{}

2、将接口暴露给客户端

在Service中,根据业务要求实现ICat接口

 public class CatBinder extends ICat.Stub {        @Override        public String getColor() throws RemoteException {            return "red";        }        @Override        public double getWeight() throws RemoteException {            return 55;        }    }

这里只是简单的传递两个数据
创建ICat对象,通过onBind方法传给客户端

ICat ICat = new ICat();@Overridepublic IBinder onBind(Intent arg0){    return ICat;}

3、客户端接收代理对象
和绑定本地Service一样,都是通过ServiceConnection的onServiceConnected来获取,但是有一点不一样
①:将Service端.iadl文件生成的.java文件连同包一同复制到客户端项目中
②:onServiceConnected()方法获得对象的代理方法为:

catService = ICat.Stub.asInterface(service);

获取到代理对象后,就可以通过它来回调Service中实现的方法了

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. 类和 Json对象
  3. python list.sort()根据多个关键字排序的方法实现
  4. 《Android面试宝典》学习笔记(第三章:组件)
  5. Android新的menu实现――ActionMode
  6. Android中对Handle机制的理解
  7. Android(安卓)下使用 JSON 实现 HTTP 请求,外加几个示例!
  8. Android的MediaRecorder架构介绍
  9. Android中Animator & Animation比较

随机推荐

  1. XML解析(一),SAX解析XML
  2. Android群英传--绘图机制与处理技巧(三)
  3. Android输入事件从读取到分发五:事件分发
  4. Android 应用集成百度地图开发和注意事项
  5. Android开发——纯JAVA代码方式界面设计
  6. Android 日志保存到本地---CscSDK
  7. android 之 百度地图
  8. android从啥都不会到能瞎捣鼓之弄界面(一
  9. Android任务、进程、线程详解
  10. android 方法数越界问题 65536/64k(方法数