Android JNI 참고사항

로컬 및 글로벌 참조

대부분의 JNI 함수는 로컬 참조를 반환합니다. 전역 참조를 생성하려면 (*env)->NewGlobalRef(env, xxx)를 사용하세요.

(*env)->DeleteGlobalRef(env, xxx)는 전역 참조를 삭제합니다.

약한 참조 생성((*env)->NewWeakGlobalRef(env, xxx))

약한 참조가 유효한지 확인: JNI_FALSE == (*env)->IsSampleObject(env, WeakRef, NULL)

스레드 동기화

Java의 객체별 동기화

동기화됨(obj) {

。。。

}

네이티브 코드 구현:

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

...

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

자체 구축된 로컬 스레드는 JNIEnv를 직접 사용할 수 없으며 가상 머신을 연결하여 JNIEnv를 얻는 방식으로 구현할 수 있습니다.

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

JNIEnv를 사용하여 관련 메서드를 호출합니다. . .

(*jvm)->DettachCurrentThread(jvm)

Guess you like

Origin blog.csdn.net/konga/article/details/119482679