내 애플리케이션은 일부 원시 코드가있는 Android 앱입니다.JNI에서 jobject를 갱신 할 수 없습니다.
Java 코드는 새 스레드 (새 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 "갱신"은 자바의 표준 용어가 아니기 때문에 설명하십시오. – technomage