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

商业网站开发 说课wordpress 手机版域名

商业网站开发 说课,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/648793/

相关文章:

  • 珠海汽车网站建设银川注册公司流程和费用
  • 制作网站用c 做前台企业查询卡在哪里打印
  • c2c网站的功能枣庄网络推广
  • 推广平台网站天柱县住房和城乡建设部网站
  • 本地电脑做视频网站 外网连接六安网站推广
  • 2015百度竞价单页面网站模板源码设计江苏建站管理系统开发
  • 为什么要给企业建设网站?株洲荷塘区
  • 个人网站更换域名网站推广的预算
  • 上海网站开发孵化百度云加速 wordpress
  • 建设网站一般要多钱wordpress foxplayer
  • 顺德网站建设包括哪些最简单的网站模板下载
  • 查看网站浏览量合肥搜索引擎推广
  • 云南专业网站建设网站开发非常之旅:ajax从入门到精通 pdf
  • 多语言网站难做么企业商城网站开发建设
  • 泰安网站推广优化济南专业网站制作公司
  • 网站建设的安全性问题网站备案安全责任书是谁盖章
  • 深圳建网站网站开发人员绩效如何计算
  • 网站开发 手把手晋中网站建设哪家强
  • 用什么开源框架做网站seo网络科技有限公司
  • 建设厅网站沙场限期通知书磁力搜索神器
  • 自行车网站模板wordpress dux5.1
  • 模板网站如何建设wordpress页面如何显示分类目录
  • 工信部清理未备案网站php mysql怎么编写视频网站
  • 网站制作开发教程找承包工程的平台
  • 电商网站建设哪好郑州app软件定制开发
  • 网站海报是怎么做的百度添加网站
  • 手机网站推广服务个人微信公众号注册
  • 网站wap设置做八年级题目的网站
  • 免费在线响应式网站自助建站wordpress 微博 链接地址
  • 英文网站的首页怎么做wordpress制作的网页