摘要: Binder驱动的代码都在kernel里面,这里就简单讲一下里面涉及到的几个东西:1.MemoryBinder其实本质上就是一中数据传输方式,这种方式是通过binder driver实现的。我们知道其他的一些IPC的方法,在传递数据的时候,一般都会有两次拷贝,发送者拷贝到底层,底层再拷贝给接收者。但是Binder通过共享內存进行通信,只有一次copy。看下面的图中,每个涉及到Binder通信的进程,都会有一个共享内存,它是binder驱动和进程之间的共享内存。但是进程是无法对内存进行写操作的,是只读的。Process A向Process B传递数据時,这些数据会被driver从ProcessA 阅读全文
posted @ 2014-01-02 10:57 Chloe_zhang 阅读(3430) 评论(1) 推荐(1)
摘要: 在第三篇Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java。实际上,还要加一句:Native里也有Proxy(BpServiceManager),因为ServiceManager也是要服务于其他native service嘛。ServiceManager是一个在init.rc里定义的一个system process,在系统启动的时候,它就启动了。如果它挂了,那么像zygote,media,surfaceflinger这些service就都要重启,可见它有多重要了吧。看一 阅读全文
posted @ 2014-01-02 10:55 Chloe_zhang 阅读(1106) 评论(0) 推荐(0)
摘要: 1.什么是NativeServiceNative Service,是通过C或C++代码写出來,提供给Java进行远程调用的RemoteService。向Android开机就启动的surfaceflinger,media都是native service。在前一篇中,我們总结了Binder通信的整個流程:Java Proxy代码走到JNI实现的BinderProxy的transact()方法之后,就直接进入到Native实现的BpBinder,然后一直通过IPCThreadState对象发送Binder消息。而在另一个process的IPCThreadState会接收Binder消息,再通过JNI 阅读全文
posted @ 2014-01-02 10:53 Chloe_zhang 阅读(3247) 评论(0) 推荐(0)
摘要: 1.Java和C++中的Binder从前一篇 Binder机制,从Java到C (5. IBinder对象传递形式) 中可以看到,使用Binder的Java代码,到最后都会进入到Native环境,将具体的分发工作交给执行效率更高的Native代码。而这些Native的实现都会统一到一个lib:libbinder。在前面的讲述中,我们已经接触到了native中的JavaBBinder,BBinder,JavaBBinderHolder把一些相关的类整理一下,可以得到下面Java和C++代码的关系:Java环境里的Binder的对象,会通过JNI 调用init()方法,创建一个JavaBBinde 阅读全文
posted @ 2014-01-02 10:52 Chloe_zhang 阅读(2617) 评论(0) 推荐(0)
摘要: 转载请标注:张新燕:http://www.cnblogs.com/zhangxinyan 1. Application 中的 service 我们知道Android中Service有三种类型:Local Service,Local Bounded Service,Remote Service。 Lo 阅读全文
posted @ 2014-01-02 10:47 Chloe_zhang 阅读(2427) 评论(2) 推荐(0)
摘要: 转载请标注:张新燕:http://www.cnblogs.com/zhangxinyan/p/3487381.html 前段时间一直在看有关Binder机制的内容,觉得受益匪浅,整理记录于此,大家请随意翻看。 当然这部分内容只是作为Binder的入门知识,如果想知道更详细的内容的话,就可能要更深入的 阅读全文
posted @ 2014-01-02 10:46 Chloe_zhang 阅读(1720) 评论(0) 推荐(0)