最近即将做的一个项目里面需要使用到AIDL(Android Interface Definition Language:接口描述语言)技术,自己早前只是简单瞄了一眼,我的理解它和java中的RMI的概念差不多,在这里我就不相信讲解什么事AIDL了,网上这种介绍非常多。不过概念毕竟是书本上的东西,我决定亲自测试一下。废话不说了,直接开始
1、 既然AIDL是既然是可以在不同进程间进行操作,那么我们首先就需要准备两个项目,我们先来看看不同的两个项目结构式什么样子的。如图:
我们先暂且定义一个项目为“服务器端项目”,一个为“客户端项目”,其中紫色线框里面的东西是第一个需要注意的地方,就是不管你两个项目包名有多大差异,但是aidl文件必须放置在同一个包下面,而且名字也要相同。
2、 我们现在创建好了项目,下一步就是开发调用接口和实现方法了。其实aidl文件在这里就充当的是一个interface类,你可以在它里面写上你要公布给客户端的调用接口。(具体代码我就不写了,大家可以看我上传的项目)在写aidl接口时,需要注意的是:类命必须和你的aidl文件名相同;必须指明当前包路径;如果是常用类型,如:String、List、int、void之类的,就不需要导入所在包路径了,当使用了外部类时,就需要导入这个类所在的包路径了;书写方法时,每个参数必须指定in或out来表明它是输入参数还是输出参数。
3、 既然aidl我们写完了,那么接下来当然是要去实现这个接口,让它来帮我们做事情了, Aidl因为是远程调用,所以这里你的实现类必须是一个继承Service的类,然后在这个实现类中再去做aidl的实现方法。上图中TestService就是我的实现类,具体代码也请看我上传的项目。不过在TestService需要注意的就是,onBind方法一定要返回你实现的aidl实例对象,供远程调用方使用
public IBinder onBind(Intent intent) {
return binder;
}
4、 服务端manifest.xml中需要进行如下配置,不然你客户端调用会无法获得你的aidl对象的,我之前做测试的时候,一直被这个问题困扰。
<service android:name="TestService" android:process=":remote">
<intent-filter>配置你的AIDL接口完整路径
<action android:name="com.lifeblood.ITestService" />
</intent-filter>
</service>
5、 做完了服务器的工作后,我们再开始做客户端的工作。客户端其实就很简单了,把服务器的aidl拷贝过来,创建一个ServiceConnection用来得到远程onBind中传递过来的aidl接口对象,然后在启动的时候进行一次绑定bindService就可以开始使用aidl中的方法了。
如果各位以后需要使用到aidl,那么只要注意以上说的,我想就不会出现什么大问题了,至少我就是这样走过来的。希望上面的介绍能对各位有帮助,如果中间有错误的地方,也请各位指正,大家共同学习。
分享到:
相关推荐
Android AIDL基础-利用AIDL实现客户端向服务端传递Listener接口
在Android开发中,AIDL(Android Interface Definition Language)是一种用于跨进程通信(IPC,Inter-Process Communication)的机制,使得应用程序的不同组件可以在不同的进程中相互通信。本教程将深入讲解如何利用...
本篇将详细介绍基于Android AIDL的基础开发步骤,结合实际示例进行解析。 1. **理解AIDL** AIDL是Android提供的接口定义语言,它的作用类似于Java中的接口,但主要用于解决Android应用中的跨进程通信问题。当一个...
AIDL基础概念** AIDL是一种接口定义语言,类似于Java中的接口,但它专门用于定义跨进程通信的接口。通过AIDL,开发者可以创建一个接口,该接口在服务(Service)端定义,客户端(Client)可以通过这个接口与服务...
**AIDL基础** AIDL文件本质上是简单的接口定义,它允许开发者声明哪些方法可以在进程间调用。AIDL支持基本数据类型、数组、列表、映射以及自定义数据类型。以下是一个简单的AIDL示例: ```aidl interface ...
源代码是学习和实践AIDL基础的绝佳素材。 **标签解析:** 1. **Android** - 这表明内容与Android操作系统和其开发环境相关。 2. **aidl** - AIDL是关键知识点,它是Android系统中处理进程间通信的重要工具,通过...
AIDL基础知识** AIDL文件是一个文本文件,使用特定的语法来声明方法签名,类似于Java接口。通过AIDL,Android系统会自动生成对应的Binder代理类,使得客户端和服务端能够进行有效的通信。 **2. AIDL_server部分** ...
1. **AIDL基础** - AIDL文件是文本文件,后缀为`.aidl`,它定义了进程间通信的接口。这个接口可以包含方法签名、数据类型以及参数。 - Android编译系统会根据`.aidl`文件自动生成对应的Java接口和类,使得客户端和...
### AIDL基础 1. **接口定义**: 在AIDL中,开发者通过创建`.aidl`文件来定义接口。这个文件包含了方法签名,类似于Java中的接口。例如: ```aidl interface IMyService { void sendMessage(int msg); String ...
**Android Aidl基础详解** 在Android开发中,进程间通信(Inter-Process Communication,简称IPC)是必不可少的技术之一。AIDL(Android Interface Definition Language)就是Android系统提供的一种强大的IPC机制,...
AIDL基础 AIDL是一种接口定义语言,类似于Java中的接口,用于定义进程间通信(IPC, Inter-Process Communication)的接口。通过AIDL,服务端可以暴露方法供客户端调用,实现数据的传递。AIDL文件通常以`.aidl`为...
AIDL基础** AIDL文件通常以.aidl为扩展名,它定义了一组方法,这些方法将在服务和客户端之间传递。AIDL文件的语法类似于Java,但只支持基本数据类型和Parcelable对象。例如: ```aidl interface IMyService { ...
1. **AIDL基础** AIDL的基本语法类似于Java,但它主要用于定义接口,这些接口可以被Android系统用来生成边界对象(Binder)和代理类。当一个应用组件想要调用另一个应用组件中的方法时,就需要通过AIDL定义的接口来...
### 一、AIDL基础 1. **AIDL定义**: AIDL是Android中用于创建服务(Service)接口的接口定义语言,类似于Java中的接口,但专门用于处理进程间的通信。它能够将接口转换为可以在不同进程中运行的二进制格式,确保了...
AIDL基础 AIDL文件是一个简单的文本文件,后缀为`.aidl`,用于定义接口和其方法。AIDL支持的数据类型包括基本类型(如int、boolean等)、List、Map、Parcelable对象以及其他的AIDL接口。当编译器处理AIDL文件时,...
**一、AIDL基础** AIDL是一种接口定义语言,用于描述服务提供的方法。通过AIDL,服务端能够暴露其功能,客户端则可以调用这些功能,即使它们位于不同的进程中。AIDL文件通常以.aidl为扩展名,定义了服务端公开的...
1. **AIDL基础** AIDL文件定义了接口,这个接口描述了客户端和服务器之间可以调用的方法。在AIDL中,每个方法的参数和返回值都需要明确指定类型,因为这些类型会在编译时转化为二进制格式进行跨进程传递。 2. **...
Aidl基础 Aidl是基于接口的IPC机制,类似于COM或CORBA,但更加轻量级。它通过生成Java代理类来实现客户端与服务端的通信。服务端定义接口,客户端通过这个接口调用服务端的方法,实现实时的数据交互。 ### 2. ...
一、AIDL基础 1. AIDL语法:AIDL类似于Java接口,定义了一组方法,这些方法可以在客户端和服务端之间进行调用。每个AIDL文件包含一个接口声明,接口中可以定义各种数据类型,包括基本类型、List、Map等,并且支持...
**一、AIDL基础** 1. **定义接口**:首先,我们需要创建一个`.aidl`文件,该文件中定义了服务端暴露给客户端的接口。接口中的方法声明类似于Java,但参数类型仅限于基本数据类型、List、Map、Parcelable对象及其...