jni不通过线程c回调java的函数 --总结
1、JNIEnv类型是一个指向全部JNI方法的指针。该指针只在创建它的线程有效,不能跨线程传递
2、JavaVM是虚拟机在JNI中的表示,一个JVM中只有一个JavaVM对象,这个对象是线程共享的。
通过JNIEnv我们可以获取一个Java虚拟机对象,其函数如下:
jint GetJavaVM(JNIEnv *env, JavaVM **vm);
3、JNIEnv指针仅在创建它的线程有效。如果我们需要在其他线程访问JVM,那么必须先调用AttachCurrentThread
将当前线程与JVM进行关联,然后才能获得JNIEnv对象。当然,我们在必要时需要调用DetachCurrentThread
来解除链接。
jint AttachCurrentThread(JavaVM* vm , JNIEnv** env , JavaVMAttachArgs* args);
- vm:虚拟机对象指针。
- env:用来保存得到的JNIEnv的指针。
- args:链接参数,参数结构体如下所示。
- return:链接成功返回0,连接失败返回其他。
4、在AttachCurrentThread中c层回调java层的时候,要创建java层的对象只能使用jni不通过线程c回调java的函数博客中的env->findClass()的方式,这样会出现问题,不清楚的看博客http://blog.csdn.net/lipeng32768/article/details/42032073
5、在android 8.0系统调试的时候,使用jni不通过线程c回调java的函数博客中方式进行回调,出现了问题,解决的办法是在c层使用pthread创建一个单独的线程进行回调。
posted on 2018-01-22 14:27 luzhouxiaoshuai 阅读(253) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!