【发布时间】:2012-03-10 06:32:40
【问题描述】:
这就是JNI的流程
JNI_onLoad - 获取 JavaVM(获取用于调用静态方法的 jclass)
然后需要从Java调用一些东西到C:
GetEnv() 获取 JNIEnv 和 AttachCurrentThread() 以使用它。
调用java方法
处理 java 方法返回值。
DetachCurrentThread() - 空闲线程
到了最后
DestroyJavaVM()
问题是:
- 那里调用 DestroyJavaVM(),如果我需要这样做?在我的主 Activity 的 onDestroy() 中?
-
JNI_onUnload 是否曾经调用过,我必须在那里清理什么?
- 我是否需要存储在静态全局变量中的免费 jclass?
- JNI 是否释放本地超出范围的 jarrays/jarrays 元素、字符串和字符串字符、函数返回后的作业对象,或者我必须始终注意这一点(调用 env->Release(something))
- AttachCurrentThreadAsDaemon()有什么好处和用途?
【问题讨论】:
标签: java android c android-ndk java-native-interface