《android初步学习》关于安卓中AIDL的使用及蓝牙中相应运用

本文主要参考 :http://blog.csdn.net/liuhe688/article/details/6400385

初步学习安卓,遇见了AIDL的相关知识点,特写了这样一篇blog方便交流与自己以后的复习查阅。

首先AIDL的作用:

在Android中,每个应用(Application)执行在它自己的进程中,无法直接调用到其他应用的资源,那我们有时需要在应用间交互,怎么办呢?于是,Android需要实现IPC协议。然而,这个协议还是有点复杂,主要因为需要实现数据管理系统(在进程或线程间传递数据),Android为我们实现了自己的IPC,也就是AIDL。

具体的实现过程此处并不打算详述,可点击开头链接。

我只整理一下自己的思路:

1.首先实现服务器端,在服务器端工程建立一个aidl文件,这时候安卓会帮我们自动生成一个java文件(在gen目录下),该文件对应一个与AIDL文件名相同的一个interface,其中在AIDL中要求的方法在此处被标记为abstract方法,该interface中的stub内部类(继承了这个interface)和asInterface(android.os.IBinder obj)方法可以将IBinder对象转换为AIDL的前缀对象(就是AIDL文件对应的类型,该方法必要的时候会生成代理(proxy)以返回,)。

2.实现自己的服务器程序,在服务器程序中服务器继承service,在service里面通过onBinder方法返回实现了AIDL中配置的方法的stub类。

3.将service类在mainfest里面添加相应过滤器

4.为了实现进程间的通信协议,在客户端工程中也应当有相同的AIDL文件(同样会生成相应的java文件),然后在客户端中实现onServiceConnected(ComponentName name, IBinder service)方法,其中service参数会通过服务器OnBind方法传入,OnBind方法会在客户端执行BindService(intent, conn, Context.BIND_AUTO_CREATE)的时候进行调用(conn为serviceConnection对象,intent为intent对象(用service类的action来new)),在onServiceConnected中通过asInterface来得到AIDL对应的对象,接着即可对该对象进行访问(读写操作)。


——————————————————————————————————————————————————————

分割线 2015.7.1

因为在做蓝牙方面的东西,这里就把蓝牙中AIDL的相应运用顺便写一下,也为自己做一份笔记以便于后面需要的时候直接来看。android中 java层蓝牙相关的主要内容包括三个部分,Settings APP相关部分(主要是跟用户交互的UI相关内容),Framwork中/frameworks/base/core/java/android/bluetooth/目录中相关内容(主要是AIDL中client的扮演者们),以及Bluetooth真正的核心实现/packages/apps/Bluetooth/src/com/android/bluetooth中相关的内容(AIDL中的各个profile对应的service实现)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值