我有一个使用多个线程的android应用程序(例如ui thread一个网络线程)。现在我希望两个线程都调用本机函数。还有一些本机函数会调用java函数。
为此,需要JNIEnv*
,这与线程不同。但我认为调用GetEnv()
非常低效。
有没有办法为每个线程缓存JNIEnv*
,然后确定我们在哪个线程(在本机函数中)使用正确的缓存JNIEnv*
?
答案 0 :(得分:0)
您无法缓存JNIEnv,并且应该在缓存的JVM *上使用AttachCurrentThread()。如果本机线程已经附加,我相信这个函数等同于NOOP。
if ((*jvm)->AttachCurrentThread(jvm, (void **)(&env), NULL) == JNI_OK) {
....
}