AIDL : Android Interface Define Language(接口定义语言)

Service中跨进程间通信利器。。。。

一般都会有Client端和Server端(Server端提供服务)

  实现步骤

  1、在Server模块 main文件夹下新建一个aidl文件夹,创建AIDL文件接口,并在Client中相同位置建立相同的包,相同的AIDL文件

  2、编译之后会在build-generate-source下生成一个aidl文件夹

  3、编写Service

public class IRemoteService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
} private IBinder binder=new IMyAidlInterface.Stub(){ @Override
public int plus(int a, int b) throws RemoteException {
return a+b;
}
};
}

  4、在AndroidManifest文件中注册该Service,并设置Exported属性为true,否则无法被调用

  5、Client中调用 

     Intent i=new Intent();
i.setComponent(new ComponentName("com.alger.lu_yy.myaidl","com.alger.lu_yy.myaidl.IRemoteService"));//包名及类名
bindService(i, new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iMyAidlInterface=IMyAidlInterface.Stub.asInterface(service); //将IBinder转成Aidl接口
try {
int count= iMyAidlInterface.plus(10,2);
} catch (RemoteException e) {
e.printStackTrace();
}
} @Override
public void onServiceDisconnected(ComponentName name) {
iMyAidlInterface=null;
}
},BIND_AUTO_CREATE);

   

注意:发现在Aidl文件中是无法引入相关的类的,能传递的类型有:基本数据类型(short除外),List及Map 这些都是无需Import的,当我们需要传递一些自定义的数据类型时?该如何使用呢?

  1、在java文件夹下建立与aidl文件下相同的包,创建相关的类,并实现Parceable接口

public class Person implements Parcelable {
private String name;
private int age; public Person(String name, int age) {
this.name = name;
this.age = age;
} protected Person(Parcel in) {
this.age=in.readInt();
this.name=in.readString();
} public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
} @Override
public Person[] newArray(int size) {
return new Person[size];
}
}; @Override
public int describeContents() {
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}

  2、在aidl文件夹下建立相应的Person.aidl文件,里面写入

    parcelable Person;(parceleable必须要小写)

  3、并且在Aidl文件中传递自定义的数据类型时必须在类型前面加入in out 关键词

  4、同样在Client模块中相同位置建立相同的类及Aidl文件

AIDL小结的更多相关文章

  1. Android AIDL 小结

    1.AIDL (Android Interface Definition Language ) 2.AIDL 适用于 进程间通信,并且与Service端多个线程并发的情况,如果只是单个线程 可以使用 ...

  2. Android之——AIDL深入

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47071927 在上一篇博文<Android之--AIDL小结>中,我们 ...

  3. Android之——自己主动挂断电话的实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47072451 通过<Android之--AIDL小结>与<And ...

  4. AIDL使用解析

    简书本文地址:点击跳转到简书查看 之前面试的时候被问到这个问题,然而当时只有一个大致的印象,随GG,于是我就重新整理的一下.这里大力推荐<Android开发艺术探索>这本书,写的太好了! ...

  5. Android app开发知识小结

    Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...

  6. Android 使用AIDL调用外部服务

    好处:多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作, 本文包括: 1 .创建AIDL 服务端.2 .创建AIDL 客户端. 3.客户端调用服务端提供的 ...

  7. Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  8. Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  9. Android AIDL的用法

    一.什么是AIDL服务   一般创建的服务并不能被其他的应用程序访问.为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Cal ...

随机推荐

  1. 安卓开发学习经历2--《第一行代码》coolweather项目SQL语句同一个“陷阱”掉两次 注意转义字符等特殊字符正确书写 关于Id字段自增加体会

    今天,在运行<第一行代码>coolweather第二阶段代码,又一次报错,还是神奇地与昨天相似,提示,city_id字段不存在,这里我有两种理解,一种是sql语句出错了,另外一种是没有获取 ...

  2. C#压缩图片——高质量压缩方式

    传入Bitmap对象,以及新图片的长宽(Bitmap.Size),这样生成的就是跟原图尺寸一致的低质量图片 public Bitmap GetImageThumb(Bitmap mg, Size ne ...

  3. (转) Summary of NIPS 2016

    转自:http://blog.evjang.com/2017/01/nips2016.html           Eric Jang Technology, A.I., Careers       ...

  4. 将应用部署到Tomcat根目录的方法 去掉url里的项目名

    在"conf/Catalina/localhost"目录下增加新的文件"ROOT.xml"(注意大小写哦),文件内容如下: <?xml version=& ...

  5. Linq to Entity经验:表达式转换

    http://www.cnblogs.com/ASPNET2008/archive/2012/10/27/2742434.html 最近一年的项目,我主要负责一些小型项目(就是指企业内部的小项目),在 ...

  6. WebBrowser处理AJAX生成的网页内容!

    WebBrowser处理AJAX生成的网页内容! 等待网页执行完毕(AJAX执行后). 使用webBrowser1.Document.Body.OuterHtml可以获取到AJAX产生的网页内容.

  7. Mybatis与Hibernate的区别

    首先简单介绍下两者的概念: Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装. Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力 ...

  8. jsgen 搭建

    1,mongodb 2,redis  http://www.cnblogs.com/lxx/archive/2013/06/04/3116985.html http://blog.csdn.net/w ...

  9. CentOS 网卡配置bond4(LACP)

    交换机开启LACP,配置聚合. 网卡eno1, eno2, eno3.eno1为管理口,eno2和eno3绑定,配置bond4. 配置eno2: vim /etc/sysconfig/network- ...

  10. IComparable<T> Vs. IComparer<T> System.Comparison<T>

    Well they are not quite the same thing as IComparer<T> is implemented on a type that is capabl ...