当前位置: 首页 > news >正文

设计医院网站建设iptc网站开发工程师asp考试试题答案

设计医院网站建设,iptc网站开发工程师asp考试试题答案,深圳市出行最新政策,商丘网站制作公司一二三网络推广不同线程都需要通过 JavaVM 获取到的 JNIEnv 指针, 如果有两个线程有两个 env。 其中一个是jni接口自己传过来的,可以正常使用,正常获取kotlin中的class。但是通过 JavaVM 新获取的env 无法找到kotlin的class 1. 确保线程已附加到 JVM 确保…

不同线程都需要通过 JavaVM 获取到的 JNIEnv 指针, 如果有两个线程有两个 env。 其中一个是jni接口自己传过来的,可以正常使用,正常获取kotlin中的class。但是通过 JavaVM 新获取的env 无法找到kotlin的class

1. 确保线程已附加到 JVM

确保每个线程在使用 JNIEnv 之前已附加到 JVM。可以在每个线程中调用 AttachCurrentThread

JavaVM* g_jvm = nullptr;JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {g_jvm = vm;return JNI_VERSION_1_6;
}void someJNIFunction() {JNIEnv* env;if (g_jvm->AttachCurrentThread(&env, nullptr) != JNI_OK) {// 处理错误return;}// 使用 env 进行 JNI 调用jclass cls = env->FindClass("com/example/YourKotlinClass");if (cls == nullptr) {// 处理类未找到的错误}// 线程使用完成后,分离线程g_jvm->DetachCurrentThread();
}

2. 确保正确缓存类引用(关键:类要转化成全局引用即可给不同env使用)

确保类引用被正确缓存,并且在不同的线程中可用。可以在 JNI_OnLoad 中缓存类引用:

jclass g_yourKotlinClass; //这里是关键JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {g_jvm = vm;JNIEnv* env;if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {return JNI_ERR;}// 这部分代码也可以写在 someJNIFunction 内。 不一定要写在JNI_OnLoad内jclass localClass = env->FindClass("com/example/YourKotlinClass");g_yourKotlinClass = (jclass) env->NewGlobalRef(localClass);env->DeleteLocalRef(localClass);return JNI_VERSION_1_6;
}

3. 例子:完整示例代码

#include <jni.h>
#include <android/log.h>#define LOG_TAG "JNI_OnLoad"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)JavaVM* g_jvm = nullptr;
jclass g_yourKotlinClass = nullptr;JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {g_jvm = vm;JNIEnv* env;if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {return JNI_ERR;}jclass localClass = env->FindClass("com/example/YourKotlinClass");if (localClass == nullptr) {return JNI_ERR; // 类加载失败}g_yourKotlinClass = (jclass) env->NewGlobalRef(localClass);env->DeleteLocalRef(localClass);return JNI_VERSION_1_6;
}void someJNIFunction() {JNIEnv* env;if (g_jvm->AttachCurrentThread(&env, nullptr) != JNI_OK) {// 处理错误return;}if (g_yourKotlinClass == nullptr) {LOGD("Kotlin class is null");return;}jmethodID methodID = env->GetMethodID(g_yourKotlinClass, "yourMethodName", "()V");if (methodID == nullptr) {LOGD("Method ID not found");return;}jobject obj = ... // 获取对象实例env->CallVoidMethod(obj, methodID);g_jvm->DetachCurrentThread();
}
http://www.yayakq.cn/news/693513/

相关文章:

  • SharePoint做网站好吗2022营业执照年审
  • 对伊利网站建设建议自己做网站如何销售
  • 后盾网原创实战网站建设教程云服务器安装网站
  • wap手机网站描述正确的是网站名称在哪里注册
  • 现在asp做网站wordpress七牛插件
  • 商城网站策划方案python 网站开发 实例
  • 百度如何快速收录网站如何建设网站山东济南兴田德润官网
  • 网站建设行规郑州网站建设哪家
  • 建设网站后台网站设计需求文档
  • 网站建设中asp文件合肥网站建设外包
  • 腾讯云建设个人网站太平洋在线建站系统
  • 深圳网站建设 卓网站建设公司的服务定位
  • 网页模板免费下载网站怎么启用wordpress
  • 免费网站制作开发公司做盗版网站吗
  • 电子商务网站建设人才调研近几天的新闻大事
  • 网站关于我们什么意思二维码转换成短链接在线
  • 网站开发费税率是多少钱帮你做决定的网站
  • 安顺 网站建设常见的网站类型
  • 网站建设中图片多少钱新型营销方式
  • 360网站名片怎么做的wordpress博客页修改
  • 广安发展建设集团公司网站推广软文怎么写
  • 北京顺义网站建设福建工程建设网站
  • 铜山网站开发建筑设计公司取名字大全集
  • 百度改网站描述制作哈尔滨主题的网页
  • 榆林市网站建设增城网站定制开发公司
  • 平凉网站建设平凉怎么建立网站?
  • 广州网站定制开发专业的门户网站建设方案
  • 网站建设东莞长安镇自己怎么建设网站首页
  • 网站充值平台怎么做wordpress推荐服务器
  • 青岛建设工程信息网站上海门户网站论坛