`
forhope
  • 浏览: 367154 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

Android Binder机制,虚拟机

阅读更多
http://blog.csdn.net/luoshengyang/article/details/6642463


下面讲述下Android虚拟机的组成部分和一些构造原理,在介绍Android虚拟机之前,先要了解下什么是Android操作系统,所谓的Android:是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟Open Handset Alliance)开发。

Linux系统中进程间通信的方式有:socket, named pipe,message queque, signal,share memory。Java系统中的进程间通信方式有socket, named pipe等。android应用程序理所当然可以应用JAVA的IPC机制实现进程间的通信,

取而代之的是Binder通信。Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。 Binder通信是通过linux的binder driver来实现的。Binder通信操作类似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。

Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口。

系统中有一个进程管理所有的system service,Android虚拟机不允许用户添加非授权的System service,当然现在源码开发了,我们可以修改一些代码来实现添加底层system Service的目的。


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


Android虚拟机启动之前系统会先启动service Manager进程,service Manager打开binder驱动,并通知binder kernel驱动程序这个进程将作为System Service Manager。然后该进程将进入一个循环,等待处理来自其他进程的数据。用户创建一个System service后,通过defaultServiceManager得到一个远程ServiceManager的接口。

通过这个接口我们可以调用 addService函数将System service添加到Service Manager进程中,然后client可以通过getService获取到需要连接的目的Service的IBinder对象。这个IBinder是 Service的BBinder在binder kernel的一个参考,所以service IBinder 在binder kernel中不会存在相同的两个IBinder对象。

每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binder kernel访问service对象中的方法。Client与Service在不同的进程中,通过这种方式实现了类似线程间的迁移的通信方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就如同调用自己的函数。

实现接口时有几个原则:

抛出的异常不要返回给调用者. 跨进程抛异常处理是不可取的。IPC调用是同步的。如果你知道一个IPC服务需要超过几毫秒的时间才能完成地话,你应该避免在Activity的主线程中调用。

也就是IPC调用会挂起应用程序导致界面失去响应. 这种情况应该考虑单起一个线程来处理,能在AIDL接口中声明静态属性。IPC的调用步骤:

1. 声明一个接口类型的变量,该接口类型在.aidl文件中定义。

2. 实现ServiceConnection。

3. 调用ApplicationContext.bindService(),并在ServiceConnection实现中进行传递.

4. 在ServiceConnection.onServiceConnected()实现中,你会接收一个IBinder实例(被调用的Service). 调用    YourInterfaceName.Stub.asInterface((IBinder)service)将参数转换YourInterface类型。

5. 调用接口中定义的方法。 你总要检测到DeadObjectException异常,该异常在连接断开时被抛出。它只会被远程方法抛出。

6. 断开连接,调用接口实例中的ApplicationContext.unbindService()
分享到:
评论

相关推荐

    Android_binder

    综上所述,Android的Binder机制是一项非常重要的技术,它不仅支撑着整个Android生态系统的运作,也为开发者提供了强大的工具来构建复杂的应用程序。通过对Binder的深入了解,开发者可以更好地利用这一机制来提升应用...

    钟世礼-深入解析ANDROID虚拟机(带书签完整高清版)

    书中还涉及到了Android的多进程模型,讲解了如何处理进程间的通信(IPC),如Binder机制,这对于构建大型、复杂的Android应用至关重要。同时,作者还讨论了安全问题,如权限管理、代码签名和沙箱机制,这些都是保障...

    深入理解Android:卷I

    - **MediaServer为切入点**:第六章以MediaServer为例,全面分析了Binder机制,揭示了其在进程间通信中的核心作用,帮助读者理解Android系统中跨进程通信的本质。 #### 7. Audio系统工作原理 - **AudioTrack、Audio...

    binder机制的原理说明和使用说明,适合新手了解

    Binder机制作为Android系统中实现跨进程通信的核心技术之一,不仅解决了进程间通信的问题,还在系统架构设计上起到了关键的作用。通过了解Binder的工作原理及其在实际开发中的应用,开发者能够更好地利用这一机制来...

    深入理解Android之dalvik

    《深入理解Android之Dalvik》是一本专注于探讨Android操作系统核心组件——Dalvik虚拟机的专著。...同时,对Dalvik的理解也有助于更好地理解ART,以及Android系统其他相关组件,如Linux内核、Binder通信机制等。

    Android 提高篇 机制 分析

    - **Dalvik/ART运行时**:专为Android设计的虚拟机,用于执行应用程序。 - **框架层**:包含了一系列API和服务,供应用程序调用。 #### 五、基本空间划分 本章节介绍了Android如何组织其内部资源,例如: - **...

    Android主要机制深入分析

    - Android的IPC框架是理解系统内部通信机制的关键,其中涉及Binder机制、Service和Service Manager等组件。 - 深入分析IPC框架,能够帮助开发者更好地理解组件之间的通信方式和数据交互。 6. Android服务...

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

    第6章以mediaserver为切入点,对android中极为重要的binder进行了较为全面的分析,深刻揭示了其本质。第7章对 audio系统进行了深入的分析,尤其是audiotrack、audioflinger和audiopolicyservice等的工作原理。第8章...

    android内存管理机制分析[归类].pdf

    Android Binder是Android系统的核心组件,它提供了一种进程间通信(IPC)机制,允许不同进程之间共享数据和服务。Binder驱动的源代码位于`drivers/staging/Android/binder.c`。电源管理驱动则包括早期挂起(early ...

    AndroidIPC通讯机制源码分析.pdf

    本文将深入解析Android中的Binder通信机制,包括其原理、优点以及源码层面的实现。 Binder通信机制是由Linux内核中的Binder驱动程序支持的,它不同于传统的Linux IPC方式如socket、pipe、message queue等。Google...

    android IPC及原理简介

    总结来说,Android的Binder机制是其系统设计的关键部分,提供了一种高效、安全的IPC方式。通过Binder,不同进程的服务和组件可以协同工作,构建出复杂的Android应用生态。理解并熟练掌握Binder通信原理对于Android...

    Android框架浅谈

    Binder机制是Android系统中非常重要的一个概念,它不仅用于进程间通信,还被广泛应用于服务管理、图形渲染和音频输出等多个方面。Binder的工作原理涉及到用户空间与内核空间的交互,具体来说: 1. **Binder驱动程序...

    Android核心分析.pdf

    3. **Binder机制**:Binder是Android中进程间通信的基础,通过Binder机制实现了跨进程的数据共享和服务调用。深入理解Binder的工作原理,有助于开发者在开发复杂的多进程应用时更加得心应手。 4. **Dalvik虚拟机与...

    Android技术内幕.系统卷(扫描版)

    第3章 android的ipc机制--binder /100 3.1 binder概述 /101 3.1.1 为什么选择binder /101 3.1.2 初识binder /102 3.2 binder驱动的原理和实现 /102 3.2.1 binder驱动的原理 /102 3.2.2 binder驱动的实现 /103 3.3 ...

    android_framework.ppt

    Android的Binder机制是系统服务之间进行进程间通信(IPC)的主要手段。Binder通信基于Linux内核中的binder驱动程序,它实现了类似线程迁移的特性,使得不同进程间的通信仿佛在一个进程中执行。每个进程中都有一个...

    Android系统原理全5册

    这包括内核裁剪、设备驱动程序的编写、HAL(硬件抽象层)的工作方式,以及Android特有的服务如Binder IPC机制,这些都是Android系统底层交互的关键。 最后,虽然不在指定的文件名列表中,但“Android从入门到精通....

    android 系统的详细介绍

    Binder是Android IPC的主要机制,它提供了安全的跨进程通信方式。其他IPC方式还包括Content Providers、Broadcast Receivers和Intent,它们让应用能以标准化的方式交换数据和事件。 综上所述,Android系统是一个...

    Android-AndroidProcesses.zip

    在Android中,进程间通信主要通过Binder机制实现,它是一种基于C/S架构的轻量级通信方式。除此之外,还可以使用AIDL(Android Interface Definition Language)来定义跨进程接口,简化IPC编程。 4. 服务生命周期:...

    android整体架构ppt

    Android添加了IPC Binder机制,通过Service Manager管理服务和数据交换,使得进程间通信更加高效和便捷。 3. **内存管理**: 与标准Linux的OOM(Out of Memory)机制不同,Android采用LMK(Low Memory Killer)...

Global site tag (gtag.js) - Google Analytics