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

const char* const 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