android binder机制,注册系统服务---Java层注册系统服务
来源:互联网 发布:点云数据英文 编辑:程序博客网 时间:2024/06/05 04:11
6 Java注册系统服务
Java获取的ServiceManager代理是ServiceManagerProxy,
ServiceManagerProxy的addService如下,
public void addService(String name, IBinder service, boolean allowIsolated) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IServiceManager.descriptor); data.writeString(name); data.writeStrongBinder(service); data.writeInt(allowIsolated ? 1 : 0); mRemote.transact(ADD_SERVICE_TRANSACTION, data, reply, 0); reply.recycle(); data.recycle(); }
BinderProxy是Binder的内部类, mRemote变量指向BinderProxy对象。因此调用将数据打包后调用
BinderProxy的transact方法,
public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { Binder.checkParcel(this, code, data, "Unreasonably large binder buffer"); return transactNative(code, data, reply, flags); }
transactNative对应的是android_util_Binder.cpp的android_os_BinderProxy_transact方法,
static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj, jint code, jobject dataObj, jobject replyObj, jint flags){ ... //java Parcel转为native Parcel Parcel* data = parcelForJavaObject(env, dataObj); Parcel* reply = parcelForJavaObject(env, replyObj); ... //gBinderProxyOffsets.mObject中保存的是new BpBinder(0)对象 IBinder* target = (IBinder*) env->GetLongField(obj, gBinderProxyOffsets.mObject); ... //此处便是BpBinder::transact(), 经过native层,进入Binder驱动程序 status_t err = target->transact(code, *data, reply, flags); ... return JNI_FALSE;}
Java层的BinderProxy.transact()最终交由Native层BpBinder的BpBinder::transact()完成。
BpBinder的transact方法在上个章节中已经论述了。
由此看出,Java注册系统服务最后也会走native方法。
阅读全文
0 0
- android binder机制,注册系统服务---Java层注册系统服务
- android binder机制,注册系统服务---客户端Binder驱动
- android binder机制,注册系统服务--服务端servicemanager binder驱动
- android binder机制,注册系统服务---native客户端
- android binder机制,注册系统服务---服务端servicemanager
- android binder机制,注册系统服务---结果返回
- android注册系统服务
- Android系统服务注册
- 注册系统服务方法
- Linux 系统服务注册
- 如何注册系统服务
- windows注册系统服务
- Linux注册系统服务
- Linux 注册系统服务
- Tomcat 注册系统服务
- 注册、卸载系统服务
- linux注册系统服务
- Linux 注册系统服务
- CodeForces
- Linux netstat命令详解
- 走向云计算之Hadoop基本介绍及生态系统
- java培训第一天
- 计算机软件编程英语词汇集锦
- android binder机制,注册系统服务---Java层注册系统服务
- 矩阵求导计算法则 例题
- Allegro PCB简单操作(一)
- 使用XIB设置UILabel的换行及设置每一行的字体大小
- 如何用递归的方式颠倒字符串
- 解决UBUNTU系统连不上WIFI问题
- [LeetCode] 55. Jump Game
- Loadrunner性能指标分析
- FFmpeg的H.264解码器源代码简单分析:概述