前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JNI|在子线程中获得JNIEnv|AttachCurrentThread

JNI|在子线程中获得JNIEnv|AttachCurrentThread

作者头像
望天
发布于 2019-05-26 08:49:06
发布于 2019-05-26 08:49:06
1.1K00
代码可运行
举报
文章被收录于专栏:along的开发之旅along的开发之旅
运行总次数:0
代码可运行

A JNI interface pointer (JNIEnv*) is passed as an argument for each native function mapped to a Java method, allowing for interaction with the JNI environment within the native method.This JNI interface pointer can be stored, but remains valid only in the current thread. Other threads must first call AttachCurrentThread()to attach themselves to the VM and obtain a JNI interface pointer. Once attached, a native thread works like a regular Java thread running within a native method. The native thread remains attached to the VM until it callsDetachCurrentThread() to detach itself.[3]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Call_Back_Invoke( void *user,int notify_id, unsigned int param )
{
	bool  isAttacked = false;
	JNIEnv* env;
	if(NULL == jni_tmpc.g_JVM)
	{
		LOGE("g_JVM == NULL");
		return ;
	}
	int status = (jni_tmpc.g_JVM)->GetEnv((void **) &env, jni_tmpc.g_JNI_VERSION);

	if(status < 0) {
		LOGD("callback_handler:failed to get JNI environment assuming native thread"); 
		status = jni_tmpc.g_JVM->AttachCurrentThread(&env, NULL);
		if(status < 0) {
		   LOGE("callback_handler: failed to attach current thread");
		    return;
		}
		isAttacked = true;
	}

	switch( notify_id )
    {
   	case...
		 ...
    }	
	if(isAttacked) 
	{
		(jni_tmpc.g_JVM)->DetachCurrentThread();
	}	
	LOGE("jni Call_Back_Invoke(1) notify_id = %d",notify_id );
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011年09月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JNI|在子线程中获得JNIEnv|AttachCurrentThread
A JNI interface pointer (JNIEnv*) is passed as an argument for each native function mapped to a Java method, allowing for interaction with the JNI environment within the native method.This JNI interface pointer can be stored, but remains valid only in the current thread. Other threads must first call AttachCurrentThread()to attach themselves to the VM and obtain a JNI interface pointer. Once attached, a native thread works like a regular Java thread running within a native method. The native thread remains attached to the VM until it callsDetachCurrentThread() to detach itself.[3]
望天
2019/06/14
4K0
关于JNI开发的一些建议
上一篇文章介绍了JNI开发的基础知识,但是大多数同学在JNI开发中还是会遇到一些问题,我们选择一些问题给大家分析一下,希望对大家有些帮助。
马上就说
2022/05/25
9500
JNI编程如何巧妙获取JNIEnv
这里穿插一篇Java JNI相关的知识点,总结一下自己平时工作心得,相信会对做JNI编程的同学有所帮助。
音视频开发进阶
2020/06/24
4.8K1
JNI线程相关
之前文章提到过JNIEnv是线程相关的,即在每一个线程中都有一个JNIEnv指针,每个JNIEnv都是线程专有的,其他线程不能使用本线程中的JNIEnv.
小蚂蚁与大象
2020/07/22
1.4K0
Android JNI 中的线程操作
Native 中支持的线程标准是 POSIX 线程,它定义了一套创建和操作线程的 API 。
音视频开发进阶
2019/07/26
1.2K0
【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )
1 . 前置知识点 : 参考 【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 ) 博客内容 , 了解如何在 C++ 中调用 Java 方法 ;
韩曙亮
2023/03/27
1K0
【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )
【Rust笔记】Rust与Java交互-JNI模块编写-实践总结
近期工作中有Rust和Java互相调用需求,这篇文章主要介绍如何用Rust通过JNI和Java进行交互,还有记录一下开发过程中遇到的一些坑。
MikeLoveRust
2023/10/18
1.2K0
【Rust笔记】Rust与Java交互-JNI模块编写-实践总结
「音视频直播技术」JNI注意事项(一)
Android手机现在已经占据全球智能手机市场第一位了。但Android手机广为大家所诟病的就是运行速度越来越慢。于是各App都在想尽办法进行优化,以提升用户感受。
音视频_李超
2020/04/02
1.8K0
JNI介绍
JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互.
小蚂蚁与大象
2020/07/22
9200
C++11 JNI开发中RAII的应用(一)--制作基础工具
最近项目C++底层代码写完了,开始做java与底层代码的接口部分,就涉及到JNI编程,我这是第一次写JNI代码,看了很多资料,得到一个印象:JNI开发本身不复杂,但如果操作不慎,很容易造成内存泄露参见《jni 内存泄露》,而且最容易被忽视的就是本地引用(LocalReference)造成的内存泄露。 按照oracle官方对的文档 《Java Native Interface Specification Contents》的描述,
10km
2022/05/07
4040
Android JNI学习(三)——Java与Native相互调用
前面两篇文章简单的介绍了JNI,下面我们就进一步了解下一下JNI的调用原则,要想了解JNI的调用原则, 前面我们说了JNI中的JNIEnv以及Java类型和native中的类型映射关系。下面我们先来看注册native函数
隔壁老李头
2018/08/30
2.5K0
Android JNI学习(三)——Java与Native相互调用
Android基础--JNI
Dalvik虚拟机加载C库时,即执行System.loadLibrary()函数时,第一件事是调用JNI_OnLoad()函数。可以在JNI_OnLoad 去注册方法
小蚂蚁与大象
2020/04/17
1.2K0
NDK开发之三方so包在CMake的引入、文件拆分和合并,以及线程
在平常开发项目的时候常见的是引入三方的so库,然后java调用已经给好的api。如果需要在C++或者C中调用呢,Android的NDK开发,提供了CMake,将三方的so库,动态链接到我们的项目。 这边以一个简单的例子在C++代码调用so的api
包子388321
2020/06/16
2.2K1
NDK 开发中的几个重要知识点
在 Native 层中通过 JNI 可以自由地访问 Java 对象,访问 Java 对象一般分为 3 步。
字节流动
2020/06/03
1K0
NDK--C语言线程运用及jni创建线程
关于linux中线程的知识:https://blog.csdn.net/wucz122140729/article/details/98588567 关于linux中线程同步的知识:https://blog.csdn.net/wucz122140729/article/details/98589012 linux线程是由进程模拟,和进程没有什么本质上的区别,相比于进程,线程在使用上便利很多,线程之间可以共享数据,但这也带来了一系列的问题。在我们在一个线程中对一个数据进行操作时,有时不希望别的线程修改数据
aruba
2020/07/02
1.5K0
利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用
在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码。而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI(Java原生接口)实现H2数据库漏洞的利用 。
FB客服
2019/10/29
1.3K0
利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用
Android JNI出坑指南
笔者结合自身经验、网上资料对 JNI 的坑进行总结,如果有不正确或遗漏之处欢迎指出。
腾讯Bugly
2018/03/23
4.4K2
深入 Android 系统 - Android 的 JNI
Android作为一种嵌入式操作系统,有大量驱动、硬件相关的功能必须在native层实现,另外一些注重性能、功耗的功能使用C/C++来实现也优于用Java来实现。因此,在Android的开发中,无论是应用级的开发,还是系统级的开发都离不开JNI。Android在编译、应用打包和安装、程序装载等各方面都对JNI进行了有力的支持。
字节流动
2022/09/26
1.9K0
Frida Internal - Part 3: Java Bridge 与 ART hook
前面的文章中介绍了 frida 的基础组件 frida-core,用于实现进程注入、通信和管理等功能。加上 frida-gum 和 gum-js 的核心能力,我们已经可以很方便地使用 JavaScript 脚本来进行代码劫持、动态跟踪等进程分析操作。
evilpan
2023/02/12
1.6K0
NDK开发(九) :Hello jniCallback
转载请以链接形式标明出处: 本文出自:103style的博客 本文操作以 Android Studio 3.5 版本为例 本文为参考官方示例 hello-jniCallback 动手写的 Demo. ---- NDK开发(一) :NDK入门指南 NDK开发(二) :JNI的数据类型 NDK开发(三) :JNI访问Java变量和方法 NDK开发(四) :JNI操作Java数组 NDK开发(五) :JNI实现文件加解密 NDK开发(六) :JNI实现文件拆分和合并 NDK开发(七) :JNI实现文件夹
103style
2022/12/19
3510
相关推荐
JNI|在子线程中获得JNIEnv|AttachCurrentThread
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文