C本地接口
JNIEnv* jniEnv = NULL;
jclass TestProvider = NULL;
jobject mTestProvider = NULL;
void CtoJavaInit(void){
TestProvider = (*jniEnv)->FindClass(jniEnv,"com/example/jni/C2jni");
if(NULL == TestProvider)return 2;
jmethodID construction_id = (*jniEnv)->GetMethodID(jniEnv, TestProvider, "<init>", "()V");
if(0 == construction_id)return 3;
mTestProvider = (*jniEnv)->NewObject(jniEnv, TestProvider, construction_id);
if(NULL == mTestProvider)return 4;
SendJ = (*jniEnv)->GetMethodID(jniEnv, TestProvider, "javaSend","([BI)I");
if(NULL == obdSendJ)return 5;
return 0;
}
int cSend(char *data, int datalen){
int len,intresult;
jbyteArray bytes;
if(NULL == jniEnv || NULL == mTestProvider || NULL == obdSendJ)return 0;
if(NULL == data || datalen > 128)return 0;
bytes = (*jniEnv)->NewByteArray(jniEnv, datalen);
if(NULL == bytes)return 0;
(*jniEnv)->SetByteArrayRegion(jniEnv, bytes, 0, datalen, (const jbyte *)data);
(*jniEnv)->CallIntMethod(jniEnv, mTestProvider, obdSendJ, bytes, datalen);
(*jniEnv)->DeleteLocalRef(jniEnv, bytes);
return datalen;
}
JNIEXPORT void JNICALL
Java_nativeMethod(JNIEnv *env, jobject obj){
char *sendtest = "test...";
jniEnv = env;
CtoJavaInit();
cSend(sendtest, strlen(sendtest);
}
说明:
JAVA代码循环调用nativeMethod接口,nativeMethod则通过cSend将一串数据发送到java的javaSend接口
问题是:循环发送N次后(200次左右)(*jniEnv)->CallIntMethod(jniEnv, mTestProvider, obdSendJ, bytes, datalen);出现崩溃
也做过以下测试:
nativeMethod接口中做如下修改
char *sendtest = "test...";
jniEnv = env;
if(nativeMethod_firstcall == 1)CtoJavaInit(); //只在首次调用nativeMethod才进行接口初始化
cSend(sendtest, strlen(sendtest);
但结果是软件更快崩溃也试过在每次nativeMethod返回时释放mTestProvider,但依然没有效果
请大牛们指点 ...
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。