Android系统进程间通信Binder机制在应用程序框架层(3)

const charconst kBinderProxyPathName = "android/os/BinderProxy";      static int int_register_android_os_BinderProxy(JNIEnv* env)   {       jclass clazz;          clazz = env->FindClass("java/lang/ref/WeakReference");       LOG_FATAL_IF(clazz == NULL, "Unable to find class java.lang.ref.WeakReference");       gWeakReferenceOffsets.mClass = (jclass) env->NewGlobalRef(clazz);       gWeakReferenceOffsets.mGet           = env->GetMethodID(clazz, "get""()Ljava/lang/Object;");       assert(gWeakReferenceOffsets.mGet);          clazz = env->FindClass("java/lang/Error");       LOG_FATAL_IF(clazz == NULL, "Unable to find class java.lang.Error");       gErrorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);              clazz = env->FindClass(kBinderProxyPathName);       LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.BinderProxy");          gBinderProxyOffsets.mClass = (jclass) env->NewGlobalRef(clazz);       gBinderProxyOffsets.mConstructor           = env->GetMethodID(clazz, "<init>""()V");       assert(gBinderProxyOffsets.mConstructor);       gBinderProxyOffsets.mSendDeathNotice           = env->GetStaticMethodID(clazz, "sendDeathNotice""(Landroid/os/IBinder$DeathRecipient;)V");       assert(gBinderProxyOffsets.mSendDeathNotice);          gBinderProxyOffsets.mObject           = env->GetFieldID(clazz, "mObject""I");       assert(gBinderProxyOffsets.mObject);       gBinderProxyOffsets.mSelf           = env->GetFieldID(clazz, "mSelf""Ljava/lang/ref/WeakReference;");       assert(gBinderProxyOffsets.mSelf);          return AndroidRuntime::registerNativeMethods(           env, kBinderProxyPathName,           gBinderProxyMethods, NELEM(gBinderProxyMethods));   }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjzdd.html