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类的参数值。
首先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类的参数值。
相关文章推荐
- Android FoldingLayout 折叠布局 原理及实现(一)
- 获取手机电量百分比
- 安卓开发 无线调试
- Android 绘制圆形图片
- Android 获取验证码后 在Button控件上 显示倒计时
- android textView添加不同颜色的边框
- Android安全-其他安全2-常见漏洞
- android adt官网下载地址
- android TextView的setTextSize与getTextSize的中存在的一个陷阱
- Android安全-其他安全1-组件安全
- Android命名规则
- 如何自定义android chooser 应用选择器
- android 项目中log信息的正确处理
- android studio 安装时错误:unable to run maksdcard sdk tools
- Android安全-数据安全3-通信安全
- Android开发必看-快速提高 Android 开发效率的 Web 工具
- Android实现ImageView图片双击放大及缩小
- Androidtudio
- Android之Notification使用
- AndriodStudio——Gradle 插件用户指南(6)