`
buliedian
  • 浏览: 1239298 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android源码学习之五-Android的IPC机制

阅读更多

ServiceManager启动

源码:frameworks\base\cmds\servicemanager\Service_manager.c

int main(int argc, char **argv)

{

struct binder_state *bs;

void *svcmgr = BINDER_SERVICE_MANAGER; //以此标识服务管理器

bs = binder_open(128*1024); //打开Binder驱动,在kernel/Common/Drivers/misc/binder.c

if (binder_become_context_manager(bs)) { //kernel/Common/Drivers/misc/binder.c中进行处理,将bs变成内容管理者

LOGE("cannot become context manager (%s)\n", strerror(errno));

return -1;

}

svcmgr_handle = svcmgr;

binder_loop(bs, svcmgr_handler); //进入循环等待数据的到来

return 0;

}

Binder驱动中采用RB树的方式进行存储管理,采用linuxioctl机制进行与用户程序进行交互。ServiceManager作为守护进程,使用链表保存了注册进来的其他Service,在其他服务的请求到来时,将请求通过ioctl写入驱动,将驱动和响应读出来再传递给发起请求的服务。

Binder

利用Binder驱动实现IPC通信

源码:frameworks/base/include/utils/*

frameworks/base/libs/utils/*

主要的类为:

  RefBase.h :

引用计数,定义类RefBase

  Parcel.h :

为在IPC中传输的数据定义容器,定义类Parcel

  IBinder.h

Binder对象的抽象接口, 定义类IBinder

  Binder.h

Binder对象的基本功能, 定义类BBinderBpRefBaseBBinder类用于服务器端Binder,即远端Binder

  BpBinder.h

  BpBinder的功能,定义类BpBinder,用于客户端Binder

  IInterface.h

  为抽象经过Binder的接口定义通用类,

定义类IInterface,类模板BnInterface,类模板BpInterface

  ProcessState.h

表示进程状态的类,定义类ProcessState

  IPCThreadState.h

表示IPC线程的状态,定义类IPCThreadState

IPC流程

守护进程ServiceManager负责周转各进程间的数据交互服务。

进程A通过IServiceManager::getService函数取得IBinder,在此IBinder上调用Transaction进行数据传输。此IBinder会利用IPCThreadState对象通过与Binder驱动对话,将请求交由KERNEL中的驱动处理。


Binder驱动采用同步的方式将数据传递给远端Binder对象,远端Binder对象进行数据处理,将处理结果原路写回,藉由驱动再传递回IBinder。见示意图说明。


Service的实现方法

假设要实现一个TestService,可按如下方法操作:

1. 定义ITestService.h文件,定义ITestService接口并从IInterface类继承,在其中使用DECLARE_META_INTERFACE(TestService)

2. 定义ITestService.cpp文件,在其中使用IMPLEMENT_META_INTERFACE(TestService, "android.my.ITestService")

3. 实现BnTestService类,实现onTransact函数

4. 如果需要,则实现BpTestService

5. TestService启动时利用IServiceManager::addService将自己注册到服务管理器

6. 使用此服务时只需使用IServiceManager::getService函数取到ITestService接口即可

——欢迎转载,转载请注明出处,谢谢——

分享到:
评论

相关推荐

    android应用源码---浏览器源码(AndroidChromium).rar

    《深入剖析Android Chromium浏览器源码》 Android Chromium是一款开源的浏览器项目,它是Google Chrome浏览器在Android平台上的核心组件。此源码提供了深入了解Android应用程序开发、Web浏览技术以及Chrome浏览器...

    安卓Android源码——面试题-.rar

    首先,Android源码的学习通常涵盖以下几个主要部分: 1. **Android系统架构**:Android系统分为用户空间(User Space)和内核空间(Kernel Space),包括Linux内核、HAL(硬件抽象层)、System Server、应用程序...

    android平台ipc客户端源码

    在Android平台上,IPC(Inter-Process Communication)是不同应用程序之间进行通信的重要机制。它允许不同进程之间共享数据、服务和执行跨进程操作。本资源主要提供了Android IPC客户端的源码,这对于开发者深入理解...

    Android应用源码之MessageManager-IT计算机-毕业设计.zip

    【Android应用源码之MessageManager】是一个典型的Android项目,它主要展示了如何在移动开发环境中实现消息管理机制。这个Demo是针对计算机科学与技术专业学生的毕业设计,旨在帮助他们理解和掌握Android应用开发的...

    Android源码——快捷查询源码.zip

    本资源"Android源码——快捷查询源码.zip"包含的是一个帮助开发者快速查询Android源码的工具或指南,旨在提高开发效率,深入理解Android系统的运行机制。以下是基于这个主题的详细知识点: 1. **Android源码结构**...

    Android-Pc-Socket-Connection源码

    通过学习和理解这个"Android-Pc-Socket-Connection"源码,开发者可以掌握Android与PC间的网络通信技术,为构建更复杂的跨平台应用程序打下基础。实践中,你可能会遇到网络延迟、数据解析、并发处理等问题,这些都是...

    android源码

    Android源码是一个庞大的开源项目,包含了操作系统、中间件层、应用程序框架以及丰富的API库,是开发者深入了解Android系统工作原理和定制化...然而,由于Android源码的复杂性,学习和掌握它需要耐心和深入的编程知识。

    Android IPC 通信实例

    在"android_ipc_0430"这个压缩包文件中,可能包含了相关的代码示例、讲解文档或者项目源码,可以帮助读者更深入地理解和实践Android IPC通信。通过学习这些实例,开发者能够熟练掌握各种IPC机制,并能根据实际需求...

    Android源码解析

    ### Android源码解析知识点概述 #### 公共技术点概览 - **Java反射** - Java反射机制允许运行时检查类、接口、字段和方法的信息,并能够动态地调用方法和修改字段值。 - **应用场景**:动态加载类、实现插件化...

    android源码开发实战3.05.zip

    《Android源码开发实战》是针对Android系统源码分析与应用开发的一本深入实践书籍,主要面向具有...通过深入学习Android源码,开发者可以更好地理解系统底层运作,提升应用质量和性能,甚至为Android系统本身做出贡献。

    安卓系统源码 (android 14 rar)

    四、源码学习路径 1. **Kernel源码分析**:理解设备驱动和内核模块,了解Android对Linux内核的定制。 2. **System Server源码**:探究系统服务的工作机制,如系统状态管理、服务启动等。 3. **UI框架源码**:分析...

    【优亿Android特刊】第二十二期:Android源码修改

    - **IPC通讯机制**:学习Binder机制以及Service、AIDL等接口的使用。 - **HeaderViewListAdapter**:分析ListView中Header和Footer的实现方式。 - **WiFi设计原理**:探讨WiFi模块的设计思想和技术实现。 - **...

    50个优秀的Android项目源码

    "MyBrowser(简单网页浏览器)"项目是学习Android WebView的绝佳案例。开发者可以了解如何加载网页,实现前进后退功能,以及如何处理JavaScript与Java之间的交互。 "365MobileSecretary v1.0.6(365手机助手AIDL)...

    Android系统源代码情景分析-源码

    总结来说,深入学习Android系统源代码对于提升开发者的技能水平至关重要。通过分析源码,不仅可以了解系统内部工作原理,还能提升问题解决能力,对于个人职业发展和团队项目有着积极的推动作用。"Android系统源代码...

    [Android源码备份][学习相关]365MobileSecretary

    【Android源码备份】【学习相关】365MobileSecretary是一个专为Android平台设计的应用程序,其源码备份为我们提供了一次深入理解Android应用开发的宝贵机会。通过分析和研究365MobileSecretary的源码,我们可以了解...

    android framework 开发揭秘

    Service Manager是Android Binder IPC(Inter-Process Communication)机制的一部分,它维护了一个服务注册表,使得不同进程间能安全有效地通信。Service Server则是实现特定服务的进程,如Activity Manager Service...

    android源码开发实战20.06.zip

    以上是Android源码开发实战课程中的主要知识点,通过这些内容的学习,开发者可以更深入地理解Android系统的运作机制,从而编写出更高效、更稳定的应用程序。同时,这也为定制化Android系统或者进行系统级优化打下了...

    android源码开发实战6.09.zip

    在Android源码开发实战6.09的课程中,我们将深入探索Android操作系统的内部机制,了解并实践如何基于源码进行应用开发。这个压缩包包含了关于Android系统开发的详细资料,帮助开发者提升对Android系统底层的理解,...

    android开发艺术探索书中源码

    《Android开发艺术探索》是一本深受Android开发者喜爱的技术书籍,由任玉刚撰写。这本书深入浅出地讲解了Android开发中的各种技术难点和最佳实践,旨在帮助...总之,这本书的源码是Android开发者不可多得的学习资源。

    android源码开发实战6.08.zip

    在Android源码开发实战6.08的课程中,我们将深入探索Android操作系统的内部机制,了解并实践如何基于源码进行应用开发。这个压缩包包含了该课程的学习资料,旨在帮助开发者提升对Android系统核心功能的理解,以及...

Global site tag (gtag.js) - Google Analytics