前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android基础进阶之学习使用AIDL进行跨进程通信

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

作者头像
用户1263308
发布2018-02-01 18:57:14
5890
发布2018-02-01 18:57:14
举报
文章被收录于专栏:代码GG之家代码GG之家
  • AIDL是什么

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

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

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

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

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

  • 2. 编写这个文件,AIDL使用简单的语法可以声明一个带有一个或者多个带有参数和返回值方法的接口参数和返回值可以是任何类型。非常类似Java。 在这里,我们尝试在接口中定义两个方法。一个返回String类型,一个返回Int型。
  • 3.建立一个提供这项服务的Service 如果eclipse有自动编译的话,或者手动clean一下项目,就会发现在工程的gen目录下,SDK工具已经生成一个.java接口文件(和.aidl文件同名)。主要包含一个名字为Stub的子类,这是一个它父类的抽象实现,并且声明了.aidl中所有的方法。

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

  • 4.把接口暴露给客户端(其他需要此方法的应用),这就需要继承Service实现onBind方法,并返回一个你已经实现了的Stub类。 testString 这个方法,返回了一个字符串拼接的结果;testInt 这个方法,返回的是两个int值相加求和的结果。
  • 5.当然还有最重要的,也是初学者容易忽略的几点。涉及到的service要在AndroidManifest.xml中注册,注意一定要添加android:exported="true"属性(否则会在客户端访问时报安全异常)。并且记得在server应用启动时,触发启动这个提供服务的AidlService.java。 如此,服务端就算部署完成了。 第二步:编写客户端(获取服务方)

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

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

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

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

  • 第三步:效果演示

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

关闭Client应用,结果如下:

综上:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码GG之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档