Android JNIAndroid开发Android技术知识

《深入理解Android:卷1》- JNI层(二)

2018-03-26  本文已影响186人  Dufre

JNIEnv是什么?

《深入理解Android:卷1》- JNI层(一)中,在JNI函数的注册方法中,不管是静态方法还是动态方法,其函数参数中第一个参数是一个接口指针,类型为JNIEnv。

JNIEnv类型实际上代表了Java在本线程的运行环境,通过这个JNIEnv* 指针,就可以对Java端的代码进行操作。JNIEnv的指针会被JNI传入到本地方法的实现函数中来对Java端的代码进行操作。

JNIEnv内部结构和作用

JNIEnv是一个指向指针的指针,这个指针指向一个指针数组,指针数组中的每个指针指向接口函数。

Description of Figure Interface Pointer.png

这些接口函数的作用有两个:

一个Java对象包括:

操作Java对象的本质就是操作这些对象的成员变量和成员函数,Java对象除了少数几个外,在JNI层都会用object来表示对象的数据类型。

在JNI规则中,用 jfieldID和jmethodID来表示Java类的成员变量和成员函数:

jfieldID和jmethodID可以通过两个函数得到:

//jclass代表Java类,name表示成员函数或成员变量名,sig为这个函数的签名信息
jfieldID GetFieldID(jclass clazz, const char *name, const char *sig)
jmethodID GetMethodID(jclass clazz, const char *name, const char *sig)

得到这两个参数后,JNI层调用Java对象的成员变量和成员函数时,传入jfieldID 或jmethodID;jobject和其他参数就可以实现调用了。

JNIEnv与线程有关

JNIEnv是一个与线程相关的变量。

JNIEnv与JavaVM的区别

今日单词

参考文章

上一篇下一篇

猜你喜欢

热点阅读