【发布时间】:2023-03-25 11:55:01
【问题描述】:
我有一个 Android 应用程序,它由一些需要能够调用 Java 对象的方法的本机线程(未附加到 JVM)组成。
我打算这样做的方式是创建一个 JNI 函数,我从相关的 Java 对象调用它,它允许我获取并缓存所需的 Java 对象方法 ID、JNIEnv 和静态本机数据中的对象引用结构,以便我的本机线程可以(线程安全地)访问所需的方法(例如使用 (*env)->CallVoidMethod(env, this, JavaMethodID, ...) 等;
我不相信这种方法会奏效,因为我读到 JNIEnv 指针不能在线程之间共享,并且只有附加到 JVM 的线程才能做这种事情......
这是一种可行的方法吗?
【问题讨论】:
-
JNIEnv只对当前线程有效,但JavaVM是全局的。所以,保存一个指向它的指针,以及对你的类、对象、方法 ID 的全局引用,这样就可以了。
标签: android java-native-interface