`
mgssnake
  • 浏览: 42366 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

AIDL简单入门

阅读更多
最近即将做的一个项目里面需要使用到AIDL(Android Interface Definition Language:接口描述语言)技术,自己早前只是简单瞄了一眼,我的理解它和java中的RMI的概念差不多,在这里我就不相信讲解什么事AIDL了,网上这种介绍非常多。不过概念毕竟是书本上的东西,我决定亲自测试一下。废话不说了,直接开始
1、 既然AIDL是既然是可以在不同进程间进行操作,那么我们首先就需要准备两个项目,我们先来看看不同的两个项目结构式什么样子的。如图:



我们先暂且定义一个项目为“服务器端项目”,一个为“客户端项目”,其中紫色线框里面的东西是第一个需要注意的地方,就是不管你两个项目包名有多大差异,但是aidl文件必须放置在同一个包下面,而且名字也要相同。
2、 我们现在创建好了项目,下一步就是开发调用接口和实现方法了。其实aidl文件在这里就充当的是一个interface类,你可以在它里面写上你要公布给客户端的调用接口。(具体代码我就不写了,大家可以看我上传的项目)在写aidl接口时,需要注意的是:类命必须和你的aidl文件名相同;必须指明当前包路径;如果是常用类型,如:String、List、int、void之类的,就不需要导入所在包路径了,当使用了外部类时,就需要导入这个类所在的包路径了;书写方法时,每个参数必须指定in或out来表明它是输入参数还是输出参数。
3、 既然aidl我们写完了,那么接下来当然是要去实现这个接口,让它来帮我们做事情了, Aidl因为是远程调用,所以这里你的实现类必须是一个继承Service的类,然后在这个实现类中再去做aidl的实现方法。上图中TestService就是我的实现类,具体代码也请看我上传的项目。不过在TestService需要注意的就是,onBind方法一定要返回你实现的aidl实例对象,供远程调用方使用
public IBinder onBind(Intent intent) {
return binder;
}
4、 服务端manifest.xml中需要进行如下配置,不然你客户端调用会无法获得你的aidl对象的,我之前做测试的时候,一直被这个问题困扰。
<service android:name="TestService" android:process=":remote">
    <intent-filter>配置你的AIDL接口完整路径
    <action android:name="com.lifeblood.ITestService" />
    </intent-filter>
</service>
5、 做完了服务器的工作后,我们再开始做客户端的工作。客户端其实就很简单了,把服务器的aidl拷贝过来,创建一个ServiceConnection用来得到远程onBind中传递过来的aidl接口对象,然后在启动的时候进行一次绑定bindService就可以开始使用aidl中的方法了。

如果各位以后需要使用到aidl,那么只要注意以上说的,我想就不会出现什么大问题了,至少我就是这样走过来的。希望上面的介绍能对各位有帮助,如果中间有错误的地方,也请各位指正,大家共同学习。
  • 大小: 120.9 KB
分享到:
评论
19 楼 houtian80 2011-07-26  
赞一个,灰常好!简单易懂
18 楼 sexy22 2011-04-26  
先拿下研究下,有问题再来问楼主,谢谢
17 楼 feifei694893239 2011-04-26  
不是太懂aidl的
16 楼 fox6900141 2011-04-25  
楼猪这种文章真好,简单易懂!真实! 不跟那些网上其他那些抄来抄去的讲了一大堆,全是废话。
15 楼 唐上铧 2011-04-12  
谢谢lz的分享
14 楼 wdeqingren 2011-03-07  
加个想引用的类.aidl  文件就好了
13 楼 enefry 2011-01-15  
不知道楼主有没有实现 自定义类作为 参数 使用的aidl..我那个老是提示错误..
12 楼 lenovo123 2011-01-14  
全是干货,好!!
11 楼 arlen95950 2010-11-25  
学习了,谢谢
10 楼 robinrush 2010-11-19  
"其中紫色线框里面的东西是第一个需要注意的地方,就是不管你两个项目包名有多大差异,但是aidl文件必须放置在同一个包下面,而且名字也要相同。 "

>>>>>只要aidl文件在同一工程中就可以了,注意包名和aidl中的包名一样即可
9 楼 lishali12345 2010-10-26  
谢谢分享,刚刚下下来,验证了一下,确实比较详细,虽然简单,但是入门已足够了!
8 楼 shixin30 2010-10-19  
写的这么详细,而且带源码,顶楼主啊!
7 楼 chenzubin 2010-07-22  
如果是不同进程间的Activity可不可以实现AIDL通信呢,provider感觉不是很专业
6 楼 CmdMac 2010-07-06  
写得很好 谢谢分享
5 楼 mgssnake 2010-05-26  
如果是android调用服务端程序,那么不需要使用aidl的模式
有很多种方式:http、web service、或是socket都可以,aidl不适合这样的结构
aidl是相当于插件功能,以后你只用更新这个aidl apk,进行功能上的扩展,这样就可以避免主apk程序更新
4 楼 fenglang 2010-05-26  
你好,我想用您的实例来做个测试,想用aidl来实现android对服务器端的调用,请问在服务器端还需要配置?服务器是tomcat,ide是eclipse
3 楼 fenglang 2010-05-26  
谢谢大虾了,这个问题困扰我好长时间,网上的代码多,但对于一个初学者来说太难,大虾的实例真是太有用了~`
2 楼 yuanliyin 2010-05-05  
回头好好研究下android系统music源码,那里面用到比较多
1 楼 rongchengzhuang 2010-04-30  
好东西,学习了

相关推荐

    安卓跨进程通信之AIDL使用入门

    本文将深入探讨AIDL的基本使用,帮助你快速入门。 首先,理解AIDL的基本概念是非常重要的。AIDL是一种接口定义语言,它允许你定义可以在不同进程间传递的数据类型和方法。通过AIDL,你可以创建一个接口,该接口将在...

    aidl入门测试

    **Android AIDL(Android Interface Definition Language)入门测试详解** 在Android开发中,当需要在不同进程间进行数据通信时,AIDL(Android Interface Definition Language)是必不可少的工具。AIDL提供了一种...

    AIDL入门demo

    这只是一个简单的示例,实际应用中,AIDL可以处理更复杂的通信场景,如传递自定义对象,处理异步调用等。 总结来说,AIDL是Android中进程间通信的关键技术,它简化了不同进程间服务的调用,使得开发者可以构建...

    AidlDemo(简单aidl的例子.zip

    **描述解析:** "简单的Android学习源代码 aidl的使用方法 Android 入门学习的资历" 描述中提到这是一份适合初学者的教育资源,它提供了一个AIDL的实际应用案例,帮助学习者理解如何在Android应用中实现跨线程通信。...

    aidl案例小分析 in out inout 自定义类型传输

    aidl案例小分析 in out inout 自定义类型传输,主要针对aidl的客户端与服务端通信,先打开服务端,操作客户端,...语言较为混乱,java和kotlin kotlin都是简单的入门,没有任何骚操作,感觉不错的话,可以给个三连。

    Android Binder入门学习笔记

    代理模式的简单示例如下: ```java // 假设的购票接口 public interface ITicket { boolean buyTicket(); } // 官方12306实现 public class Real12306 implements ITicket { @Override public boolean ...

    android初学者入门项目

    41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯...

    android开发从入门到精通光盘源代码.rar

    《Android开发从入门到精通》是一本旨在帮助初学者及进阶者掌握Android应用程序开发的教程书籍。随书附带的光盘源代码是作者为了辅助读者理解和实践书中理论知识而精心准备的资源集合。这些源代码涵盖了Android开发...

    AndroidStudioNDK入门开发

    为了提高效率,NDK还提供了异步处理机制,如AIDL(Android Interface Definition Language)用于跨进程通信,以及JNI的异步调用,可以避免阻塞UI线程。 总结来说,Android Studio NDK入门开发涵盖了原生库的构建、...

    android一步一步最基础学习__新手

    - 保存简单的键值对数据。 - 适用于轻量级的数据存储。 - **File**: - 文件读写。 - 适用于存储较大的数据文件。 #### 第十九讲:Android Notification的使用入门 - **Notification概念**: - 提醒用户有关...

    Android中使用Gradle来构建App项目的入门指南

    在`src/main`下,Java代码和资源分别位于`java`和`resources`目录,而Android插件还要求其他特定的目录,如`AndroidManifest.xml`、`res`、`assets`、`aidl`、`rs`和`jni`。 开发者可以根据需求自定义这些默认配置...

    Android高级编程(中文版)

    这本书旨在帮助读者掌握Android系统的高级特性和开发技巧,是Android入门者的理想读物。通过本书,开发者可以提升自己的技能,从初级阶段跨越到高级开发者水平。 在Android开发中,有以下几个重要的知识点: 1. **...

    Android技术级别

    这个阶段的开发者通常刚接触Android开发,熟悉Java或Kotlin语言基础,能够根据官方文档或者教程编写简单的应用程序。他们了解Android的基本组件,如Activity、Intent、BroadcastReceiver等,并能使用Android Studio...

    android新手8天理解安卓 视频(1-67)

    这套教学视频涵盖了Android开发的基础理论知识到实际开发过程中的常见问题解决方案,对于想要快速入门Android开发的新手来说非常实用。通过系统学习,可以有效提升个人技能水平并为将来从事相关领域工作打下坚实基础...

Global site tag (gtag.js) - Google Analytics