AIDL接口写法小记

本文介绍了Android中使用AIDL(Android Interface Definition Language)进行进程间通信(IPC)的方法。AIDL允许应用程序公开服务接口,使得其他应用能够安全地调用服务并获取数据。通过对比BroadcastReceiver和ContentProvider,作者选择了AIDL,因为它提供了更安全、更灵活的数据共享方式。文章详细展示了如何创建和实现AIDL接口,包括服务端定义接口、生成的Java代码和实现服务,以及客户端如何连接和调用接口方法。最后,作者分享了在项目中遇到的错误及解决办法,提醒开发者注意导入的库避免重复导致的问题。
摘要由CSDN通过智能技术生成
           AIDL,度娘还是解释很到位的,实际就这么回事了。
Android系统中的进程之间不能 共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。
为了使其他的应用程序也可以访问本应用程序提供的服务,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接口的初衷,就是想通过写这样一个接口来让A应用来调用这个接口函数获取一些B应用的数据来达到数据共享的效果。当然开始的时候有想过用BroadcastReceiver来做,直接广播带参的方式带数据来实现共享,但是随后还是想想不是很稳妥,一来广播带参简单的通知类消息可以带参不适合带复杂参数,二来安全性上很难保证,所以否决了这个想法。后来想了下用用ContentProvider来实现,但是一想又要涉及到数据库方面的编程,我所需要的数据量并不需要进行复杂的数据库存储,因此后面也就否决了。最后于是想到了AIDL这种方式。
首先直观的感觉是因为AIDL直接指定了暴露的外部接口的使用目标,因此安全性没必要担心,另外A应用调用接口更加灵活,接口可以很随意的添加,可以主动调用来获取数据。
 直接看做法了,首先是在A应用,暂且我们把提供接口的应用定义为A应用,即服务端。在应用src目录下直接创建文本文档 IService.txt,然后改后缀名为 IService.aidl,接着用文本编辑器添加内容
 
package com.xxx.xxx;

interface IService {
      String localcity();
      byte[] bitmapbyte();
}
        顶端是包名,即当前文件所在的包名,IService为接口名,函数内则是后面需要实现的接口函数。
 这个文件创建好后,在Eclipse中当前工程clean后就会在gen目录下自动生成IService.java,因为是自动生成,因此基本算是系统自动添加的源码了,大概类似下面的源码,可以忽略不看。
/*
 * This file is auto-generated.  DO NOT MODIFY.
 * Original file: D:\\Android-APK-CODE\\2015-No Protect\\car\\ci
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值