【发布时间】:2012-10-22 11:58:22
【问题描述】:
所以如果我们附加我们必须在它完成后分离线程,对吧?
JNIEnv* get_jni_env()
{
JNIEnv* res;
JAVA_VM->GetEnv((void**) &res, JNI_VERSION_1_6);//Using cached JavaVM
JAVA_VM->AttachCurrentThread(&res, NULL);
return res;
}
我从我的 Activity 类的 @Override protected void onDestroy() 调用下一个本地方法
void free_jni_manager()
{
JNIEnv* env = get_jni_env();
... //Here i delete global refs (jclass)
//JAVA_VM->DetachCurrentThread();
}
错误:使用 interp 帧 (count=16) 分离线程 - 主线程仍在运行,我们尝试将其分离。
即使我们使用任何使用 JNIEnv 的函数(例如调用 java 方法),放置 DetachCurrentThread 也会导致同样的错误。
DetachCurrentThread 如果在 pthread 函数
中使用,则可以完美运行static void* thread_func(void* arg)
{
get_jni_env(); // attach new thread
//Do thread stuff
JAVA_VM->DetachCurrentThread();//thread done detached it with ok
return NULL;
}
我们是否需要分离主线程然后我们使用 JNI,这样做吗?或者然后活动将被破坏,它会用JavaVM释放自己?我们是否需要调用 DestroyJavaVM()(如果使用 onDestroy 只会导致崩溃),免费缓存的 JavaVM 或垃圾清理器将如何处理这个问题?
附:使用 AttachCurrentThreadAsDaemon()
有什么好处【问题讨论】:
标签: android c++ android-ndk java-native-interface