Вы можете попытаться кэшировать экземпляр на стороне Java в Singleton и отослать его обратно из уровня JNI, используя методы JNI, например, у вас есть класс Java CascadeClassifierCacher
, как показано ниже
package com.arophix.jniexample.jniobjects;
public class CascadeClassifierCacher {
private static CascadeClassifier cascadeClassifierCache = null;
public static CascadeClassifier getCacheInstance() {
if(cascadeClassifierCache == null) {
cascadeClassifierCache = new CascadeClassifier();
}
return cascadeClassifierCache;
}
}
со стороны JNIвы можете ссылаться на него, используя следующий поток: (зная, что ваше полное имя пакета com.arophix.jniexample.jniobjects.CascadeClassifierCacher
)
// Find the CascadeClassifierCacher class
jclass clazzId = env->FindClass("com/arophix/jniexample/jniobjects/CascadeClassifierCacher");
// Get the methodID
jmethodID jmethodIdGetCache = env->GetMethodID(clazz, "getCacheInstance", "()Lcom/arophix/jniexample/jniobjects/CascadeClassifierCacher;");
// Call getCacheInstance method.
jobject cacheInstance = (jobject) env->CallStaticObjectMethod(clazzId, jmethodIdGetCache);
Тогда вы можете использовать cacheInstance
внутри вашей стороны JNI.