Android开发经验谈Android开发Android开发

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

2019-01-31  本文已影响7人  881ef7b85f62

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


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


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

image image image

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

image

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

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

image

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

image

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

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

image

关闭Client应用,结果如下:

image

综上:

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

上一篇 下一篇

猜你喜欢

热点阅读