1
這裏是全球初始化:爲什麼使用Android NDK通過JNI將本地數組複製回Java不能正確填充?
int width = 100;
int height = 100;
int cells = width * height;
int* pixels = (int*) malloc(sizeof(int) * cells);
int i;
for (i = 0; i < cells; i++) {
pixels[i] = 255;
}
這裏是通過JNI調用數組複製備份到Java代碼:
void Java_com_example_app_setPixels(
JNIEnv *env, jobject obj, jintArray arr) {
// initializations, declarations, etc
jint *c_array;
jint i = 0;
// get a pointer to the array
c_array = (*env)->GetIntArrayElements(env, arr, NULL);
// do some exception checking
if (c_array == NULL) {
return; /* exception occurred */
}
for (i = 0; i < cells; i++) {
c_array[i] = (jint) pixels[i];
}
// release the memory so java can have it again
(*env)->ReleaseIntArrayElements(env, arr, c_array, 0);
}
這導致大多充滿Java數組 - 但它停止大約有80%的路程通過。
然而如果我改變:
c_array[i] = (jint) pixels[i];
到
c_array[i] = 255;
的改進的Java陣列被充滿。