0
나는 JNI 방법을 다음과 방법을매개 변수 jobjectArray와 관련된 메모리를 해제해야합니까?
JNIEXPORT void JNICALL Java_com_android_Coordinates_Updates
(
JNIEnv * env,
jobject obj,
jobjectArray coordinates
)
{
int size = env->GetArrayLength(coordinates);
for(int i = 0; i < size; i ++)
{
jfloatArray row = (jfloatArray)env->GetObjectArrayElement(coordinates, i);
jfloat *elements = env->GetFloatArrayElements(row , 0);
//Do I need to release this or any other memory?
env->ReleaseFloatArrayElements(row , (jfloat *)elements, i);
}
}
내 질문은 내가이 경우에 어떤 메모리를 해제해야합니까?
Java에서 JNI로 빠른 속도로 작은 데이터 (터치 좌표)를 전달하는 Android 앱이 있기 때문에이 질문을드립니다. 내 안드로이드 장치 위에 두 손가락을 빠르게 움직이면 앱이 15 초 이내에 충돌합니다. 나는 문제를 좁히려 고 애썼다. 그리고 위의 방법에서 아래의 줄을 앱에 포함 시키면 충돌이 발생했다.
jfloat *elements = env->GetFloatArrayElements(row , 0);
예, 자바 배열을 JNI로 전달 했으므로 각 배열을 하나씩 가져 왔습니다. –
감사합니다. ReleaseFloatArrayElements의 마지막 매개 변수는 무엇입니까? –
"jint mode"로 사용이 중단되었지만 실제로는 모릅니다. 확실히 색인이 아닙니다. 0 개의 반환을 확인하고 요소 "0"에 액세스하기 전에 길이 env-> GetArrayLength (row)를 확인해야합니다. 예를 들어 실제 프로젝트의 해당 부분을 잘라낼 수 있습니다. –