获取服务
2016-10-21 19:12:03 0 举报
获取服务是指通过购买或使用某种产品或服务来满足自己的需求。这种服务可以是实体的,如餐厅、酒店、理发店等;也可以是虚拟的,如在线购物、在线教育、在线医疗咨询等。获取服务的目的是为了提高生活质量,节省时间和精力,或者解决特定的问题。在现代社会,随着科技的发展和生活水平的提高,人们对于获取服务的需求也在不断增长。无论是个人还是企业,都需要通过获取服务来实现自身的发展目标。因此,了解如何有效地获取服务,以及如何选择适合自己的服务,已经成为了一项重要的生活技能。
作者其他创作
大纲/内容
BinderProxy实现了IBinder(Java)接口,BinderProxy对象是在调用Parcel.readStrongBinder(再具体点就是调用ServiceManager.getService后,读取service manager的replay时)的时候,通过jni的javaObjectForIBinder方法被创建的BpBinder实现了IBinder(Native)接口,使用handle标记binder server(每个handle都应该对应着该进程binder_proc.refs_by_desc红黑树中的一个binder_ref节点)。由ProcessState负责进行创建和维护。
C/C++
BinderProxy::transact
BBinder.transact
ProcessState/IPCThreadState::transact
Client
Java
Stub
Linux Kernel
/dev/binder
BpBinder::transact
Stub派生自Java层的Binder对象。每个Binder对象在Native层都有一个JavaBBinder与之对应。借由JNI技术从Native层发起transact调用:JavaBBinder是在Java层的Binder(Stub)对象第一次被写入Parcel中懒创建的JavaBBinder创建之后会通过JNIEnv::NewGlobalRef方法创建一个Stub的全局引用,防止Stub被回收JavaBBinder.onTransact(Native)->Binder.execTransact(Java)->Stub.onTransact(Java,Stub重写了Binder.onTransact方法)注:JavaBBinder并不是与Binder直接进行关联,而是通过JavaBBinderHolder进行关联的,Binder.mObject保存着的是JavaBBinderHolder的地址。注:binder起来之后会进入到IPCThreadState::joinThreadPool方法中死循环与binder驱动进行通信,也就是在这里由IPCThreadState负责对JavaBBinder发起调用
IPCThreadState:executeCommand
XXX
JavaBBinder
构造函数传入的参数实际类型是BinderProxy
这个颜色代表Client进程
XXXProxy
0 条评论
下一页