您的位置:首页 > 移动开发 > Android开发

Android AIDL实现远程服务

2016-02-17 12:44 316 查看
今天看到招聘要求上写,要会线程和线程之间的通信,进程和进程之前的通信,线程间的通信我会了,但是进程和进程通信时什么鬼呢?

首先AIDL是(Android Interface Definition Language)安卓接口定义语言,因为每个应用程序都运行在单独的进程中,并且,进程之间不能共享内存为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、BroadcastReceiver和ContentProvider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL(Android
Interface Definition Language)服务。

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:

(1)在工程目录中建立一个包,(假设包名为a.b.c),在包里新建一个AIDLDemo文件,扩展名为aidl的文件。 该文件的写法是首先指定包名 package a.b.c; 然后写一个接口,跟java语言一样,接口的名字要跟文件名一致

interface AIDLDemo{

void a();

void b();

}

(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。

(3)建立一个服务类(Service的子类)在这个类中写一些你要做的操作

(4)实现由aidl文件生成的Java接口 用new AIDLDemo.Stub()这个方法创建一个匿名内部类,实现你在aidl文件里定义的方法,你重写这些方法后,会返回一个IBinder类型的变量,也就是service的onbind方法的返回值类型,然后将这个变量让onbind返回回去

(5)在AndroidManifest.xml文件中配置AIDL服务,将service注册进去,并指定属性android:process=":xxx",这个xxx就是服务所在的进程名称,尤其要注意的是,标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: