共 17 篇文章
显示摘要每页显示  条
经过以上的分析,我们对Java层ServiceManager有了全新的认识,简单来说,Java层的ServiceManager就是Native层ServiceManager的一个Client,而对于Java层其他Service来说,Java层的ServiceManager又是一个Service,负责把其他Client的请求转发给Native层的ServiceManager去处理。
Binder源码分析之ServiceManager(原) ServiceManager作为Native层Service的管理员,有着极其重要的作用,主要表现两个方面: 1、对于服务端来说,系统所有的服务提供者都需要向ServiceManager注册。也就是说,Service需要先向ServiceManager注册自己,并得到自己的服务句柄,然后Client需要拿这个int型的句柄向ServiceManager请求相...
Binder机制,从Java到C (10. Binder驱动)2.binder_ref / binder_node我们拿到一个代理对象,通过binder驱动来调用远程的服务,那Binder到底是如何根据代理对象找到实体對象的呢?其实Binder驱动会在内核为process创建一個binder_proc 结构提,在binder_proc中保存着四个RB Tree。一个tree保存binder_node;看下面的图中:ProcessA向binder驱...
1 status_t IPCThreadState::talkWithDriver(bool doReceive) //mIn保存返回协议,mOut保存命令命令 2 { 3 ... 4 binder_write_read bwr; //BC_TRANSACTION是通过IO控制命令BINDER_WRITE_READ发送到Binder驱动的,所以上文中的binder_transaction_data 要写入binder_write_read结构体中。1 int binder_write(struct binder_...
Binder机制,从Java到C (8. ServiceManager in Native)在第三篇 Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java。1 service servicemanager /system/bin/servicemanager2 class core3 user system4 group system5 critical6 onrestart restart zygote7 onrestart restart...
Binder机制,从Java到C (7. Native Service)如果需要通过Native代码來提供服务:从IBinder接口的Stub对象的原理可以看出,如果在回调Java的JNI之前将代码调用截断,直接通过Native代码來实现onTransact()方法,就可以完成Service的Stub端的实现。有了template,编写一个Native Service的工作量也不大。Native Service只要稍微了解一下,看得...
Binder机制,从Java到C (6. Binder in Native : libbinder)下面这个图就是整个通信的流程,蓝色部分是在Java里的,Java中通过BinderProxy的JNI调用,进入到Native层,然后通过IPCThreadState的talkwithDriver()和Binder驱动通信,Binder驱动在做了一系列处理后,找到目标进程,也是从talkwithDriver()方法回去,然后走到JavaBBinder的transac...
在Binder module中,会有两种IBinder类型:BINDER_TYPE_BINDER,BINDER_TYPE_HANDLE。在Binder module收到数据后,会对不同的情况做进一步处理:1.传來的IBinder类型是BINDER_TYPE_BINDER, 会将binder_type转化为BINDER_TYPE_HANDLE;这時候,对应的IBinder类型就会是:1.BINDER_TYPE_BINDER → BINDER_TYPE_HANDLE → BINDER_TYPE_BINDER2.BINDE...
10 }11 public int describeContents() { //返回值描述Parcel是起什么作用的,一般是0.12 return 0;13 }14 15 public void writeToParcel(Parcel out, int flags) { //用于发送,把需要传输的属性写入Parcel。30 private TaskInfo(Parcel in) {//使用Parcel的readInt()、readLong()等方法从Parcel里读出來31 mPid = in.readInt();32 mUid = i...
Binder机制,从Java到C (3. ServiceManager in Java)那在这个之前当然是要先找到ServiceManager的代理对象,才能调用ServiceManager的服务嘛。那下面就來看一下ServiceManager.getService()是怎样的:/frameworks/base/core/java/android/os/ServiceManager.java.这个方法只有两句代码,第一句看着就是找一个IBinder对象啦,然后第二句,就是...
帮助 | 留言交流 | 联系我们 | 服务条款 | 下载网文摘手 | 下载手机客户端
北京六智信息技术股份有限公司 Copyright© 2005-2024 360doc.com , All Rights Reserved
京ICP证090625号 京ICP备05038915号 京网文[2016]6433-853号 京公网安备11010502030377号
返回
顶部