`
daibalusu
  • 浏览: 346086 次
文章分类
社区版块
存档分类
最新评论

利用AIDL来实现由Binder进行进程间通信(IPC)

 
阅读更多

在写这篇文章之前,我一直在思考这几个问题:

问题1:为什么需要IPC?

问题2:什么是Binder?

问题3:什么是AIDL?

问题4:IPC同Activity Intent, Broadcast, Content provider,Service之间有什么区别与联系?

如果您能轻松回答所有问题,那么恭喜您已经学会抢答了^-^ 直接PASS。

我想答案应该是这样的:

1. 为什么需要 IPC? IPC即进程间通信,因为基于Linux的Android不支持从当前进程访问另一个进程的数据,需要用特定的途径去实现,Android使用Binder来实现进程间通信,具体应用场景一般为有一个独立运行的Service端,从客户端(一个独立进程)访问Service端(另一个独立进程),例如可以在后台运行的音乐播放Service,以及音乐播放控制界面(客户端)。

2.Binder意思是包扎,把进程间包扎在一起,是Android的一种用实现IPC的方法,特点是只需要考贝一次内存,便可以实现跨进程的函数调用,效率较高,速度较快,(相对于Socket/管道/消息队列),具体参考这里

3.AIDL是帮助实现Binder通信的一个工具,只要用几条简单的函数声明,AIDL就会帮忙生成一个JAVA文件,包括了一个Proxy和Stub的访问接口,以及用于它们之间通信的Parcel,并保证Parcel的输入输出的顺序一致性,其中Proxy用于客户端进程,Stub用于Service端进程,有经验的程序猿完全可以自己写出Proxy和Stub的代码,而不需要使用AIDL,很明显,我不是这样的人。同时,即使是有经验的程序猿,为了节省时间,也会选择使用AIDL,看Android源码便可见一斑。

4.IPC同Activity Intent, Broadcast, Content provider,Service之间有什么区别与联系?

在android系统中,没有一个公共的内存区域,供多个应用共享存储数据,ContentProvider实现多应用跨进程共享数据,而IPC指两个或多个程序间相互调用和通信,不但可以共享数据,还能共享某个公共函数,一个SERVICE可以有几个client端访问与调用。

Intent可以携带一些数据打开另一个程序(进程),但无法进行进程间实时的通信。

Broadcast可以实现大规模杀伤性广播喊话,但也无法进行双向的进程间交流,IPC(Binder)可以。

Service是Android后台运行的程序,如果想同其进行交互,有几种方式一种是本地Service直接访问,一种是使用Messenger通信(基于AIDL),支持单线程,一种就是AIDL方式,支持多线程同时访问。

好了,有了这些预备知识,我想我应该写点程序了,就写一个带控制端(客户端)的音乐播放器吧。

为了节约时间,在GITHUB找了一个写了大半拉的音乐播放代码,大半拉我指功能完成,一堆BUG时程序的样子。 用AIDL改写了播放Service的接口,并写了一个简单的控制端,我喜欢开源,代码在https://github.com/herbertdai/Android-Music-Player,这个应用原先带有一个很酷的功能:可拖动的播放列表,这个做为K歌用再合适不过了,但是我估计K歌房里出现手机点歌还需要个4,5年的样子。除此之外,这个程序还有个对我来说特殊的功能:公司午睡终极武器==>>隔音催眠定时一体机,每天大约午睡30分钟,就选择10首歌(30分钟左右),戴上耳机开始在人声中被催眠,等10首歌放完后,音乐停止,随即由周围的“人肉人声闹钟”叫醒,所以总结一点,干IT民工的,得有个定制的音乐播放器:)

关于如何使用AIDL,这里有文章写得很好。结合我的源码就可以看懂了。

REF0:http://blog.csdn.net/universus/article/details/6211589

REF1: Parcelhttp://prasanta-paul.blogspot.com/2010/06/android-parcelable-example.html

REF2:http://myqdroid.blog.51cto.com/2057579/394189


分享到:
评论

相关推荐

    利用AIDL来实现由Binder进行进程间通信(IPC)

    利用AIDL来实现由Binder进行进程间通信

    【一图流】_02_一张图看懂 Android 进程间通信(IPC)Binder机制.png

    【一图流】_02_一张图看懂 Android 进程间通信(IPC)Binder机制:  此图表述了Android系统_进程间通信(IPC)机制全部体系,其中重点放在 Android系统中 重用 的 Binder机制 上,详尽细致,希望对大家有用;

    Android 进程间通信AIDL Demo

    Android 进程间通信AIDL demo 博客地址:http://blog.csdn.net/bigboysunshine/article/details/70228223

    Android IPC进程间通信AIDL方式Demo

    这是一个IPC进程间AIDL方式通信的简单Demo。包括服务端和客户端。目的在于协助该博客讲解binder与service之间跨进程通信机制。所有大家读源码时务必同时读该博客。 ...

    Android+ 进程间通信+ Binder驱动原理+ AIDL

    1: 分析IPC通讯:共享内存,Binder, Socket管道 这三种模式的优缺点 2:Binder通讯特点,为什么要用Binder通讯 3:Binder驱动的原理,以及Demo案例来说明Binder通讯数据传输路径 4:在3基础上优化Binder通讯,封装...

    Android进程通信之Messenger和AIDL使用详解

    提到的进程间通信(IPC:Inter-Process Communication),在Android系统中,一个进程是不能直接访问另一个进程的内存的,需要提供一些机制在不同的进程之间进行通信,Android官方推出了AIDL(Android Interface ...

    Binder通信机制与AIDL的使用

    Android进程间通信(Inter-Process Communication, IPC)采用Binder通信机制,是一种client/server结构。 AIDL(Android Interface Define Language):Android接口定义语言,帮助开发者自动生成实现Binder通信机制...

    详解Android跨进程IPC通信AIDL机制原理

    AIDL:Android Interface Definition Language,即Android接口定义语言,用于生成Android不同进程间进行进程通信(IPC)的代码,一般情况下一个进程是无法访问另一个进程的内存的。如果某些情况下仍然需要跨进程访问内存...

    AIDL服务端

    AIDL(Android 接口定义语言) 是 Android 提供的一种进程间通信 (IPC) 机制。通过这种机制,我们只需要写好 aidl 接口文件,编译时系统会帮我们生成 Binder 接口,实现进程之间的通讯。 一、如何定义aidl文件 1、...

    AIDL客户端demo

    AIDL(Android 接口定义语言) 是 Android 提供的一种进程间通信 (IPC) 机制。通过这种机制,我们只需要写好 aidl 接口文件,编译时系统会帮我们生成 Binder 接口,实现进程之间的通讯。 一、如何定义aidl文件 1、...

    android杀不死的app

    4:进程之间互相盯着,需要用到IPC进程间通信技术(也就是Binder机制AIDL 5:注意配置远程服务启动为一个新的进程,为新进程命名为 android:process=".remoteService" 6:进程A服务绑定进程B服务,进程B服务绑定进程...

    Android代码-ABridge

    于是需要解决这种IPC问题,而ABridge可轻松解决进程间通信问题。 二、Android IPC方式 跨进程常见的几种通信方式:Bundle通过Intent传递数据,文件共享,ContentProvider,基于Binder的AIDL和Messenger以及Socket。 ...

    Android通信篇--深入剖析Binder原理

    Binder是一种进程间通信机制,基于开源的OpenBinder实现;OpenBinder起初由BeInc.开发,后由PlamInc.接手。从字面上来解释Binder有胶水、粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信。一般Android应用...

    Android代码-EasyMessenger

    一款用于Android平台的基于Binder的进程间通信库,采用annotationProcessor生成IPC通信需要的代码。EasyMessenger相对于AIDL具备如下优势: 采用Java声明接口,更方便 接口方法支持重载 同时支持同步和异步通信 ...

    IPCDemo:Android IPC 机制学习 AIDL Messenger 通讯方式

    首先介绍 Android 序列化机制、Binder 工作原理,然后再通过创建 AIDL 进行进程间通信,一步步分析 AIDL 原理还有工作流程。前言在这里首先介绍 Android 序列化机制、Binder 主要是因为 AIDL 与这两个家伙密切相关,...

    leetcode安卓-jfson.github.io:关于安卓

    Binder的IPC机制,如何进行进程间通信 序号 文章名 概述 0 Linux IPC 机制 & 为何选 Binder 1 Android 中的序列化 2 使用AIDL进行进程间通讯 3 ServiceManager 启动流程 ... 待续 ... 待续 ... 开源库 常见开源库梳理...

    HelloBinder

    HelloBinder通常我们在做开发时,实现进程间通信用的最多的就是AIDL 。当我们定义好的AIDL文件,在编译时编译器会帮我们生成代码实现IPC通信。通过AIDL编译以后的代码能帮助我们进一步理解Binder IPC的通信原理。...

    Android 代码分析

    25.3 Binder进程间通讯部分 71 26 Android IPC 通讯机制源码分析 73 26.1 Binder通信简介: 73 26.1.1. ServiceMananger进程注册过程源码分析: 74 26.1.2. client获取remote IServiceManager IBinder接口: 75 ...

Global site tag (gtag.js) - Google Analytics