NDK中可靠的获取JNIEnv*的方法

使用NDK时,几乎任何方法都需要一个JNIEnv来调用。这个类是和线程相关的,如何可靠的获取它?

首先,作为NDK的so,必然有一个地方是由android系统调用的,这个调用将带来一个JNIEnv参数,不要使用它,而是调用:

JNIEnv->GetJavaVM(&g_javaVM);

获取一个JavaVM类型变量。

接着在需要使用JNIEnv的时候调用

    int status;
    JNIEnv* _jniEnv = NULL;
    status = g_javaVM->GetEnv((void **)&_jniEnv, JNI_VERSION_1_6);

    if(status < 0)
    {
        status = g_javaVM->AttachCurrentThread(&_jniEnv, NULL);
        if(status < 0)
        {
            _jniEnv = NULL;
        }
    }

即可可靠的得到jnienv了。

时间: 2024-10-28 23:18:36

NDK中可靠的获取JNIEnv*的方法的相关文章

vue 中使用 AJAX获取数据的方法

在VUE开发时,数据可以使用jquery和vue-resource来获取数据.在获取数据时,一定需要给一个数据初始值. 看下例: <script type="text/javascript"> new Vue({ el:'#app', data:{data:""}, created:function(){ var url="json.jsp"; var _self=this; $.get(url,function(data){ _se

161018、springMVC中普通类获取注解service方法

1.新建一个类SpringBeanFactoryUtils 实现 ApplicationContextAware package com.loiot.baqi.utils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware;

idea编译器中maven项目获取路径的方法

资源文件放在哪里? 上 图中的 resources 目录叫资源目录 (main下,与java如果没有请自行创建), 在项目编译后文件会被放到红色的 classes 目录下, 注意如果你的 resources 目录没有上图的那个金色资源目录图标, 请再 idea 上右键该目录选择 Mark directory as - Resources Root, 这样, 在项目编译以后, 你的资源就会放到编译目录下. 如何获得这些文件? 当资源文件被编译到编译目录下以后, 我们可以通过 Class.getRe

NDK 中无法找到头文件 解决方法

今天eclipse突然卡住强制结束进程后 workspace中的配置信息都没了得重新配置,配置完后  jni.h头文件 前面出现了Unresolved inclusion,并且jint等类型报错,正常情况下 配置好ndk路径(最新的ADT v22),右键项目---Android tools ---Add native support 就会解决这个问题.如果以前已经add 过了,只需把工程文件下的.cproject删除,以及.project中 关于 出现cdt 的标签删掉就可以重新add nati

SQL中Group分组获取Top N方法实现

1.采用row_number方法. SELECT *FROM (SELECT RowNumber =row_number() OVER (PARTITION BY TaskID ORDER BY ProduceDate DESC), * FROM dbo.ShippingDocument)tWHERE t.RowNumber< 2 ORDER BY t.TaskID ASC 2.采用游标方法.

JS获取网页中HTML元素的几种方法分析

getElementById getElementsByName getElementsByTagName 大概介绍 getElementById ,getElementsByName ,getElementsByTagName ###adv### 后两个是得到集合,byid只是得到单个对象 getElementById 的用法 举个例子: <a id="link1" name="link1" href=http://homepage.yesky.com>

60秒验证码倒计时js代码 js样式代码 方块上下左右随机移动(定时器) js中获取元素的方法 js中表单提交

60秒验证码倒计时js代码 <script type="text/javascript"> var countdown=60; function settime(val) { if (countdown == 0) { //removeAttribute() 方法删除指定的属性. disabled属性规定应该禁用 input 元素. val.removeAttribute("disabled"); val.value="免费获取验证码"

获取屏幕高宽,在代码中设置控件大小的方法

获取屏幕高宽的方法: 1 import android.view.Display; 2 import android.view.WindowManager; 3 WindowManager windowManager = getWindowManager(); 4 Display display = windowManager.getDefaultDisplay(); 5 if(display.getWidth()==480 && display.getHeight()== 272 ||

C#中获取随机数有三种方法

随机数的定义为:产生的所有数字毫无关系. 在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号. 在C#中获取随机数有三种方法: 一.Random 类 Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数. 1 2 Random rd = new Random(); int i = rd.Next(); 这种随机数可以达到一些要求较低的目标,但是如果在高并发的情况下,Random类所取到的系统时钟种子接近甚至完全一样,就很有可能出现重复,这里用