`

Android知识梳理:进程间通信

 
阅读更多

 1.Binder机制

进程间通信英文缩写为IPC。Linux系统中进程间通信的方式有:socket, named pipe,message queque, signal,share memory。Java系统中的进程间通信方式有socket, named pipe等。Android采用的是Binder通信。

Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。 Binder通信是通过linux的binder driver来实现的,Binder通信操作类似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。 Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口。关于Binder机制的深入理解以及其具体实现可参考Simon的博客,地址是http://my.unix-center.net/~Simon_fu/,在博客中搜索“binder”关键字即可找到。

2.AIDL

为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。http://developer.android.com/guide/developing/tools/aidl.html,这是谷歌SDK文档中关于AIDL的描述。Braincol对其进行了翻译,详见http://www.cnblogs.com/hibraincol/archive/2011/09/06/2169325.html。感谢他的工作!

3.Android的进程间通信的使用

3.1在应用层建立AIDL服务

对用户程序来说,我们也要创建server,或者Service用于进程间通信,这里有一个ActivityManagerService管理JAVA应用层所有的service创建与连接(connect),disconnect,所有的Activity也是通过这个service来启动,加载的。ActivityManagerService也是加载在Systems Servcie中的。

在应用层建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见实例的内容。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
 

3.2在框架层增加系统服务

系统中有一个进程管理所有的system service,Android不允许用户添加非授权的System service,当然现在源码开放了,我们可以修改一些代码来达到添加底层system Service的目的。可以参照Android代码树中的系统服务源码实现,需要注意的是系统服务的实现方式和应用层AIDL服务的实现方式稍有差别。具体的实现可以参考http://www.android1.net/Topic.aspx?BoardID=21&TopicID=990,这是台湾高焕堂先生发的一个帖子。高先生的Android造诣很高,应该多向他学习。

分享到:
评论

相关推荐

    Java基础+Android面试题

    7. Android进程间通信(IPC):包括常见的IPC机制,例如Binder和AIDL。 8. Android性能优化:内存泄漏总结、MVP模式详解、App启动流程等。 9. Android布局优化:讲解了include、merge、ViewStub的使用以优化布局...

    Android面试题及知识点

    - AIDL:理解进程间通信(IPC)的概念,以及如何通过AIDL实现跨进程通信。 7. **Android数据存储** - SharedPreference:轻量级的键值对存储。 - SQLite数据库:使用SQLiteOpenHelper和Cursor进行数据操作。 - ...

    android bluetooth框架知识整理

    D-BUS是一种灵活的进程间通信机制,提供了一种标准化的方式来命名服务、发送和接收消息,类似Android系统的Binder机制,但适用性更广。 3. **BlueZ适配层** Android的BlueZ适配层位于BlueZ库和Android框架之间,...

    Android核心知识.pdf

    - **Android组件间通信**:如AIDL(Android Interface Definition Language)用于跨进程通信。 - **Gradle构建系统**:理解和使用构建脚本,定制构建过程。 - **Android Studio**:集成开发环境的使用,包括调试、...

    Android技术档案.pdf

    - Android高级话题:涉及Android消息机制、事件分发机制、AsyncTask、HandlerThread、IntentService、Fragment、动画、进程间通信、内存泄漏、权限处理、热修复原理、插件化入门等高级知识点。 - Android性能优化...

    android知识点整理

    ### Android知识点整理 #### Java基础 1. **面向对象的理解** - 面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象包括数据(即字段,也称为属性)和操作这些数据的方法。 - 封装:将对象的...

    Android审查::fire:Android复习资料汇总(每周持续更新〜)

    - **常见面试题**:收集整理Android面试中常见的问题,如内存泄漏检测、进程间通信等。 - **源码解析**:深入研究Android系统和库的源代码,提升对系统的理解。 - **项目经验**:分享实际开发中的问题解决案例,...

    android面试题(精心收集整理).pdf 高清pdf下载.rar 下载

    8. **Android组件服务**:Service的生命周期,AIDL(进程间通信),BroadcastReceiver的使用场景,JobScheduler和WorkManager的运用。 9. **Gradle构建工具**:了解Gradle插件开发,理解build.gradle配置,使用...

    深入理解Android:卷I--详细书签版

     第9章分析了Vold和Rild,其中Vold负责Android平台中外部存储设备的管理,而Rild负责与射频通信有关的工作。本章的拓展思考部分介绍了嵌入式系统中与存储有关的知识,还探讨了 Rild和Phone设计优化方面的问题。 ...

    收集整理的Android面试资料精编汇总文档资料(23个).zip

    - Binder:Android进程间通信(IPC)的核心机制,服务和服务的交互。 8. **高级面试题.docx**: - 可能包含更深层次的问题,如Android系统定制、热修复、插件化、性能监控等。 9. **多线程专题.docx**: - ...

    Android MultiMedia框架完全解析

    6. 多媒体框架不仅涉及到音频和视频的播放、录制,也包括了与之相关的复杂系统服务和进程间通信。 这些知识构成了理解Android多媒体框架工作原理的基础,是开发者在构建应用时需要掌握的核心内容。

    Learn Android App Development

    11. 应用间通信:Android应用之间以及与其他平台的通信是高级开发中不可或缺的部分,文档提到了inter-application messaging的相关知识。 12. 背景进程服务:了解如何在后台有效地运行服务和处理任务对于Android...

    Android面试题集2020版(包含答案整理)第二部分.pdf

    这一点在实际开发中需要特别注意,因为它关系到进程间通信的并发处理。 Binder机制在Android中的具体实现主要依赖于Binder类,它实现了IBinder接口。例如,Server进程通过Binder驱动向ServiceManager注册服务,创建...

    Android课后习题答案整理.doc

    12. Android 提供轻量级的进程间通讯机制 Intent,使用跨进程组件通信和发送系统级广播成为可能 13. Android 提供了 Service 作为无用户界面、长时间后台运行的组件, 可以为应用程序提供特定的后台功能,还可以实现...

    Android面试题整理

    13. **Android组件间通信**:AIDL(Android Interface Definition Language)的使用,用于进程间通信。 14. **App启动优化**:分析冷启动和热启动,如何通过优化Splash Screen、减少启动时的内存占用等方式提升启动...

    4.Android面试题整理.rar

    13. **Android组件间通信**:AIDL(Android接口定义语言)用于进程间通信,Intent、Binder、ContentProvider等方式实现组件间的通信。 14. **热修复和插件化技术**:理解热修复框架如AndFix、Tinker的工作原理,...

    Android底层与框架学习步骤[整理].pdf

    Android基于Linux内核,应用了Linux内核的诸多特性,例如Ashmem(匿名共享内存)用于提高内存共享效率,Binder驱动程序用于支持进程间通信,而WAL(Write-Ahead Logging)则是SQLite数据库在Android中的事务日志...

    android面试题

    - AIDL(Android Interface Definition Language)用于进程间通信(IPC)。 - BroadcastReceiver,Service和ContentProvider的使用。 12. **热修复和插件化**: - 如Dexposed、AndFix等热修复技术原理。 - 插件...

    2022年Android开发工程师面试题最新整理.docx

    7. **Handler机制**:Handler、Looper和MessageQueue是Android中处理线程间通信的关键。Handler负责发送和接收消息,Looper在一个线程中循环处理MessageQueue中的消息,MessageQueue则用于存储待处理的消息。 8. **...

Global site tag (gtag.js) - Google Analytics