您的位置:首页 > 其它

在子线程中获得JNIEnv|AttachCurrentThread

2014-02-19 20:05 381 查看


JNI|在子线程中获得JNIEnv|AttachCurrentThread

http://blog.csdn.net/stefzeus/article/details/6792518

2011-09-21 14:00 5233人阅读 评论(2) 收藏 举报

jnithreadinterfacecallbackjvmnull

A JNI interface pointer (JNIEnv*) is passed as an argument for each native function mapped to a Java method, allowing for interaction with the JNI environment within the native method.This
JNI interface pointer can be stored, but remains valid only in the current thread. Other threads must first call AttachCurrentThread()to attach themselves to the VM and obtain
a JNI interface pointer. Once attached, a native thread works like a regular Java thread running within a native method. The native thread remains attached to the VM until it callsDetachCurrentThread() to detach itself.[3]

[cpp] view
plaincopy

void Call_Back_Invoke( void *user,int notify_id, unsigned int param )

{

bool isAttacked = false;

JNIEnv* env;

if(NULL == jni_tmpc.g_JVM)

{

LOGE("g_JVM == NULL");

return ;

}

int status = (jni_tmpc.g_JVM)->GetEnv((void **) &env, jni_tmpc.g_JNI_VERSION);



if(status < 0) {

LOGD("callback_handler:failed to get JNI environment assuming native thread");

status = jni_tmpc.g_JVM->AttachCurrentThread(&env, NULL);

if(status < 0) {

LOGE("callback_handler: failed to attach current thread");

return;

}

isAttacked = true;

}



switch( notify_id )

{

case...

...

}

if(isAttacked)

{

(jni_tmpc.g_JVM)->DetachCurrentThread();

}

LOGE("jni Call_Back_Invoke(1) notify_id = %d",notify_id );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: