Android基础进阶之学习使用AIDL进行跨进程通信

  • AIDL是什么

AIDL (Android Interface Definition Language), 即接口定义语言,Android提供的IPC (InterProcess Communication,进程间通信)的一种独特实现。 借助它,你可以定义接口,使得客户端和服务端之间实现进程间通信。对android来说,一个进程无法通过正常的方法来访问另一个进程的内存空间。可以说,他们需要把对象分解成操作系统可以理解的原子类型,然后使对象突破限制在不同进程之间进行传输。具体实现这种机制的代码写起来非常枯燥,所以android为你提供了AIDL语言来进行处理。

  • 使用AIDL可以解决什么样的问题

当你需要来自不同应用的客户端访问你的服务时,你就需要一个AIDl了。 举个小栗子: 手机管家提供了黑名单、号码拦截等服务,手机通信录、短信等应用需要实时获取已经被加入给名单或者标记的号码,而这部分数据是存储在手机管家这个app的数据库中。那么,为了方便通讯录和短信这些应用访问数据,手机管家就可以通过实现AIDL提供这项服务。

  • 手把手教你写一个Demo感受Aidl的使用

第一步:编写Server端(提供服务方) 1.在工程目录下,定义一个Aidl文件。New-File

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

  • 2. 编写这个文件,AIDL使用简单的语法可以声明一个带有一个或者多个带有参数和返回值方法的接口参数和返回值可以是任何类型。非常类似Java。 在这里,我们尝试在接口中定义两个方法。一个返回String类型,一个返回Int型。

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

  • 3.建立一个提供这项服务的Service 如果eclipse有自动编译的话,或者手动clean一下项目,就会发现在工程的gen目录下,SDK工具已经生成一个.java接口文件(和.aidl文件同名)。主要包含一个名字为Stub的子类,这是一个它父类的抽象实现,并且声明了.aidl中所有的方法。

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

其中Stub类有一个叫asInterface的静态方法,主要用来返回这个Stub接口的实例。

  • 4.把接口暴露给客户端(其他需要此方法的应用),这就需要继承Service实现onBind方法,并返回一个你已经实现了的Stub类。 testString 这个方法,返回了一个字符串拼接的结果;testInt 这个方法,返回的是两个int值相加求和的结果。

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

  • 5.当然还有最重要的,也是初学者容易忽略的几点。涉及到的service要在AndroidManifest.xml中注册,注意一定要添加android:exported=”true”属性(否则会在客户端访问时报安全异常)。并且记得在server应用启动时,触发启动这个提供服务的AidlService.java。 如此,服务端就算部署完成了。 第二步:编写客户端(获取服务方)

1. 把Server端中的IService.aidl拷贝一份到Client端工程目录下,注意放的路径的包名一定要和Server端相同。

2. 在Client端的MainActivity中,实现一个ServiceConnection对象,在这个对象的onServiceConnected回调方法中,就可以拿到我们所需要的提供远程服务的对象。

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

3. 编写连接这个服务和断开这个服务的方法。分别在MainActivity的onCreate和onDestroy方法中调用。

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

如此,客户端调用方式基本明朗。编写完毕。

  • 第三步:效果演示

首先,我们运行一下server端,打开remote远程AidlService,使其在运行中。然后运行Client应用,打Log,结果如下:

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

关闭Client应用,结果如下:

《Android基础进阶之学习使用AIDL进行跨进程通信》 image

综上:

这个小demo,简单实现了服务端为客户端提供服务的过程。并且形象的感受到IService.aidl文件就像一个桥梁一样铺设在两个应用之间,完美的完成了方法和数据传输的任务。

    原文作者:Android进阶开发
    原文地址: https://www.jianshu.com/p/4f192d1b935b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞