Примечания по Android JNI

локальные и глобальные ссылки

Большинство функций JNI возвращают локальные ссылки. Используйте (*env)->NewGlobalRef(env, xxx) для создания глобальной ссылки.

(*env)->DeleteGlobalRef(env, xxx) уничтожает глобальную ссылку.

Создайте слабую ссылку (*env)->NewWeakGlobalRef(env, xxx)

Определите, действительна ли слабая ссылка: JNI_FALSE == (*env)->IsSampleObject(env, WeakRef, NULL)

синхронизация потоков

Синхронизация по объекту в Java

синхронизированный (объект) {

。。。

}

Реализация собственного кода:

(*env)->MonitorEnter(env, obj);

...

(*env)->MonitorExit(env, obj);

Самостоятельно созданные локальные потоки не могут использовать JNIEnv напрямую. Их можно реализовать путем подключения виртуальной машины для получения JNIEnv.

(*jvm)->AttachCurrentThread(jvm, &env, NULL)

Используйте JNIEnv для вызова связанных методов. . .

(*jvm)->DettachCurrentThread(jvm)

рекомендация

отblog.csdn.net/konga/article/details/119482679