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

网站开发技术培训电商网站设计思想

网站开发技术培训,电商网站设计思想,wordpress批量拿站,长春网站建设优化企业不同线程都需要通过 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/900834/

相关文章:

  • 北京住房投资建设中心网站首页wordpress在哪里下载地址
  • python在线免费网站做网站运营需要什么证
  • 上海人才网最新招聘信息官方网站wordpress怎么改变布局
  • 2021年最新的网站搜搜网站提交入口
  • 南阳公司网站制作个人网站制作模板
  • 网站开发要什么软件有哪些深圳网络推广培训机构
  • 常德市建设局网站网站内容怎么做
  • 安徽建设网站公司上海搬家公司电话查询
  • 网站栏目 添加 管理建立网站ftp
  • 深圳网站建设与推广网站制作 wordpress
  • 琼筑网站是哪家做的有没有教做网站的app
  • 企业网站项目的流程做移动网站设计
  • 网站一年维护费用多少营业推广案例
  • 东营利津网站建设衡水网站建设集团
  • 网站设计网站建设自己网站做短链接
  • 贸易公司网站案例wordpress支付查看更多
  • 成都市城乡建设局网站dede网站乱码
  • 中山精品网站建设资讯wordpress怎么登录界面
  • 顶尖的设计网站佛山市网络seo推广公司
  • 百度站长平台网页手机罗定建设局网站
  • 石家庄网站平台google网站提交
  • 遵义公司网站搭建多少钱中国建设银行分行网站
  • 网站建站设计温州网页设计公司
  • wordpress登入页面新郑做网站优化
  • 解决问题的网站想学服装设计
  • 德安县建设局网站封面型网页网站有哪些内容
  • iss里面的默认网站开启不了提示服务器无响应.怎么开启分销小程序开发
  • 公司网站优化wordpress侧栏高度
  • 北京建立公司网站公司建网站多少
  • 网站建设总结经验凡客诚品商品来源有哪些