我的应用程序是一个带有一些本机代码的Android应用程序。无法续约JNI中的jobject
Java代码通过新线程(new Runnable)启动线程,在本机代码中,我通过AttachCurrentThread将该线程附加到JVM。
在该线程中调用的本地函数是一个无限循环,它将监听简单事件(布尔变量)并调用另一个本地函数,该函数通过使用适当的JNIEnv指针和jobject将在Java端填充2个Java变量并调用void方法来显示数据。该循环的原因是通常调用函数的开销(有很多分配和破坏)很可能是巨大的。
唯一的问题是,虽然我可以更新一个JNIEnv指针,但我不知道如何为jobject做这件事。
而且通过jobject我的意思是这是通过函数调用传递到本地代码,如jobject所以
jint Java_com_example_example_MainActivity_NativeFunc(JNIEnv* env,
jobject obj)
{
return;
}
如果您打算在本机代码中保留一个对象的引用,您需要通过创建新的全局引用或新的弱全局引用来明确保留引用(并且可能稍后将其释放)。在后一种情况下,您还需要在使用它之前检查是否与null等价。 – technomage
如果你的意思是“更新”,那么请解释一下,因为AFAIK“renew”并不是Java中的标准术语。 – technomage