Android JNI问题 最近遇到一个问题,就是当程序从C反调用JAVA,运行到s_vm->DetachCurrentThread();时异常退出。背景:我们是做了一个Anodroid利用了PhoneGap技术做的APP应用。其中通过画面JS调运PhoneGap,PhoneGap调用Java方法,再通过Java调用C++代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 骚年,没有attachCurrentThread( 就不需要DetachCurrentThread具体还是上代码吧 s_vm->AttachCurrentThread((JNIEnv**) &envCcallJ, (void*) &arg); jstring arg1 = (envCcallJ)->NewStringUTF(deviceId.c_str()); jstring desiredClassName = (envCcallJ)->NewStringUTF("ControllerStack"); jclass cls = envCcallJ->GetObjectClass(gCL); jmethodID mid = envCcallJ->GetMethodID(cls, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); jclass desiredClass = (jclass) envCcallJ->CallObjectMethod(gCL, mid, desiredClassName); jmethodID desiredMid = envCcallJ->GetStaticMethodID(desiredClass, "CcallJava_info", "(Ljava/lang/String;)V"); envCcallJ->CallStaticObjectMethod(desiredClass, desiredMid, arg1); envCcallJ->DeleteLocalRef(desiredClass); envCcallJ->DeleteLocalRef(cls); const char *pStr0 = envCcallJ->GetStringUTFChars(desiredClassName, 0); envCcallJ->ReleaseStringUTFChars(desiredClassName, pStr0); envCcallJ->DeleteLocalRef(desiredClassName); const char *pStr1 = envCcallJ->GetStringUTFChars(arg1, 0); envCcallJ->ReleaseStringUTFChars(arg1, pStr1); envCcallJ->DeleteLocalRef(arg1); s_vm->DetachCurrentThread(); 另外想问下,有 AttachCurrentThread一定要 DetachCurrentThread吗?看网上一些例子好像有些没有写DetachCurrentThread 给点log log BitmapFactory.decodeByteArray方法非常耗cpu性能啊 关于写游戏文档的问题 Android listView与edittext结合出问题 自定义相机,定点对焦 android可以获取网络时间么? Android应用层判断当前网络连接模式 android 系统对话框背景色属性 关于之前调用系统相机和系统剪裁问题报错图片 android sensor driver的orientation值的设置 Android webview + html 性能问题 界面滑动的问题,求大神们指导~~~~~~~ 关于在一个图片上根据坐标定位里面的商户
具体还是上代码吧
jstring arg1 = (envCcallJ)->NewStringUTF(deviceId.c_str());
jstring desiredClassName = (envCcallJ)->NewStringUTF("ControllerStack");
jclass cls = envCcallJ->GetObjectClass(gCL);
jmethodID mid = envCcallJ->GetMethodID(cls, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); jclass desiredClass = (jclass) envCcallJ->CallObjectMethod(gCL, mid, desiredClassName);
jmethodID desiredMid = envCcallJ->GetStaticMethodID(desiredClass, "CcallJava_info", "(Ljava/lang/String;)V");
envCcallJ->CallStaticObjectMethod(desiredClass, desiredMid, arg1); envCcallJ->DeleteLocalRef(desiredClass);
envCcallJ->DeleteLocalRef(cls);
const char *pStr0 = envCcallJ->GetStringUTFChars(desiredClassName, 0);
envCcallJ->ReleaseStringUTFChars(desiredClassName, pStr0);
envCcallJ->DeleteLocalRef(desiredClassName);
const char *pStr1 = envCcallJ->GetStringUTFChars(arg1, 0);
envCcallJ->ReleaseStringUTFChars(arg1, pStr1);
envCcallJ->DeleteLocalRef(arg1);
s_vm->DetachCurrentThread();
看网上一些例子好像有些没有写DetachCurrentThread