Android进程间通信

一.Linux系统进程间通信有哪些方式?

1.socket;

2.name pipe命名管道;

3.message queue消息队列;

4.singal信号量;

5.share memory共享内存;

二.Java系统的通信方式是什么?

1.socket;

2.name pipe;

三.Android系统通信方式是什么?

Binder 通信;

四.Binder通信的优势是什么?

高效率

五.Binder通信的特点是什么?

是同步,而不是异步;

六.Binder通信是如何实现的?

1.Binder通信是通过linux的binder driver来实现的,

2.Binder通信操作类似线程迁移(threadmigration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回;

3.Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。

七. Android中的 Binder通信实现要点:

1. Android中的Binder通信是基于Service与Client的工作模型的;

2. 所有需要IBinder通信的进程都必须创建一个IBinder接口;

3. 系统中有一个进程管理所有的system service:

4. Android不允许用户添加非授权的Systemservice;

5. 现在源码开放了,我们可以修改一些代码来实现添加底层system Service的目的;

6. 对用户程序来说,我们也要创建server,或者Service用于进程间通信;

7. ActivityManagerService管理JAVA应用层所有的service创建与连接(connect),disconnect;

8. 所有的Activity也是通过这个service来启动,加载的;

9. ActivityManagerService也是加载在Systems Servcie中的;

八.Android的 Service工作流程

1.Android虚拟机启动之前系统会先启动service Manager进程;2.service Manager打开binder驱动,并通知binder kernel驱动程序这个进程将作为System Service Manager;

3.然后该进程将进入一个循环,等待处理来自其他进程的数据。4.用户创建一个System service后,通过defaultServiceManager得到一个远程ServiceManager的接口,通过这个接口我们可以调用addService函数将System service添加到Service Manager进程中;

5.然后client可以通过getService获取到需要连接的目的Service的IBinder对象,这个IBinder是Service的BBinder在binder kernel的一个参考,

6.所以serviceIBinder 在binder kernel中不会存在相同的两个IBinder对象,每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binderkernel访问service对象中的方法。

7.Client与Service在不同的进程中,通过这种方式实现了类似线程间的迁移的通信方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就如同调用自己的函数。

原文地址:http://www.cnblogs.com/imlucky/p/3246013.html

[转]Android进程间通信的更多相关文章

  1. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...

  2. Android 进程间通信

    什么鬼!单例居然失效了,一个地方设置值,另个地方居然取不到,这怎么可能?没道理啊!排查半天,发现这两就不在一个进程里,才恍然大悟-- 什么是进程 按照操作系统中的描述:进程一般指一个执行单元,在 PC ...

  3. Android 进程间通信——AIDL

    代码地址如下:http://www.demodashi.com/demo/12321.html 原文地址:http://blog.csdn.net/vnanyesheshou/article/deta ...

  4. Android进程间通信-AIDL实现原理

    Android进程间通信基于Proxy(代理)与Stub(桩或存根)的设计模式(如图1-1所示).其中,Proxy将特殊性接口转换成通用性接口,Stub将通用性接口转换成特殊性接口,二者之间的数据转换 ...

  5. Android进程间通信之LocalSocket通信

    LocalSocket,在Unix域名空间创建的一个套接字(非服务端). 是对Linux中Socket进行了封装,采用JNI方式调用,实现进程间通信. 具体就是Native层Server和Framew ...

  6. android 进程间通信---Service Manager(2)

    关于servicemanager的设计: 还是这张结构图,由于ProcessState & IPCThreadState是与binder deriver交互的, 所以对于client端来说Bp ...

  7. android 进程间通信---bind的前世

    在分析bind机制之前,我发现已经有一篇文章讲解的非常清晰,并且提出了很多问题. 地址:http://my.oschina.net/keeponmoving/blog/64218 一.Linux系统进 ...

  8. AIDL Service Android进程间通信机制

    转载出处:http://www.apkbus.com/home.php?mod=space&do=blog&uid=664680&id=59465 我们知道,在Android ...

  9. android进程间通信:使用AIDL

    android 的binder其实是基于 openbinder实现的,openbinder的地址:http://www.angryredplanet.com/~hackbod/openbinder/d ...

随机推荐

  1. C++中的static 成员变量的一些注意点

    C++中的static成员变量主要用来为多个对象共享数据 例: #include <iostream> using namespace std; class Student{ public ...

  2. android笔记---百度地图api应用 (一)

    package com.example.bdtest; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKPlanNode; imp ...

  3. 【C/C++】程序如何来,编译全过程

    概述    编译的目的是把人书写的高级语言代码翻译成目标程序的语言处理程序,编译用的程序(例如gcc)称为编译系统. 一个编译系统把一个源程序翻译成目标程序的工作过程分为5个阶段:词法分析.语法分析. ...

  4. Scala解码base64编码的URL提示Last unit does not have enough valid bits

    问题描述 开始使用Base64.getMimeDecoder().decode(base_url).map(_.toChar).mkString去解码,部分数据也提示如题的错误 然后尝试使用Base6 ...

  5. 远程mysql导入本地文件

    远程mysql导入本地文件 登陆数据库 mysql --local-infile -h<IP> -u<USR> -p 选择数据库 USE xxx 导入文件 LOAD DATA ...

  6. XnView查看图片实际大小

    找了很多软件,只有它可以显示尺寸大小. 各位如有别的发现,可留言推荐,谢谢

  7. MVC3中输出Html标签的方法

    想要输出html,可以三种方式:@Html.Raw(a)@MvcHtmlString.Create(a)@{WriteLiteral(a);} @(new HtmlString( "< ...

  8. 【转】HTML <!--...--> 注释 、CSS/JS //注释 和 /*.....*/ 注释

    原文地址:http://www.cnblogs.com/iceflorence/p/5815409.html <!-- -->是HTML的注释标签,使用 < 和 > 是符合HT ...

  9. J.U.C--locks--AQS分析

    看一下AbstractQueuedSynchronizer(下面简称AQS)的子类就行知道,J.U.C中宣传的封装良好的同步工具类Semaphore.CountDownLatch.ReentrantL ...

  10. 【WPF】软件更新程序的设计思路

    目标:客户端程序在启动时,自动联网检查服务端是否有新的版本,有则提示用户更新客户端. 思路: 1.打开Visual Studio,在主体程序的解决方案下再新建一个叫自动更新程序的项目.主体程序的目录是 ...