局部引用问题

1.一个局部引用仅在创建它的native函数及该函数调用的函数中有效。在一个native函数执行期间创建的所有局部引用将在该函数返回时被释放。
2.千万不要写一个native函数来保存一个局部引用在静态变量或全局变量中并期望在以后的函数调用中使用。

// instance是一个局部引用,不能使用1中的方式进行赋值。当该函数返回后,将释放
// 包含在this->instance变量中的局部引用
JniCallbackHelper::JniCallbackHelper(JavaVM *pVM, _JNIEnv *pEnv, jobject instance) {this->jniVm = pVM;this->env = pEnv;// this->instance = instance; // 1.错误示范// 2. jobject一旦涉及到跨方法,跨线程,需要创建全局引用this->instance = env->NewGlobalRef(instance);jclass clz = env->GetObjectClass(instance);jmd_prepared = env->GetMethodID(clz, "onPrepared", "()V");
}

JNIEnv跨线程问题

1.JNIEnv是当前线程的上下文,如果在C++子线程中想要调用JAVA层的代码,那么需要使用JavaVM ->AttachCurrentThread(&env_child, 0);来创建一个子线程对应的JNIEnv,然后再调用JAVA层的代码。

// 子线程 JavaVM *jniVm
JNIEnv * env_child;
jniVm->AttachCurrentThread(&env_child, 0);
env_child->CallVoidMethod(instance, jmd_prepared);
jniVm->DetachCurrentThread();

JavaVM初始化问题

jint JNI_OnLoad(JavaVM* jvm, void* reserved) {JavaVm *javaVM = jvm;return JNI_VERSION_1_6;
}

JNI-开发注意细节点相关推荐

  1. 六十、深入理解Vue组件,使用组件的三个细节点

    @Author:Runsen @Data:2020/10/16 文章目录 is的使用 组件中的data必须是方法 ref 引用 Vue中如何操作dom 实现计算器中的功能 后言 备战前端.大四加油.下 ...

  2. 从数据类型 nvarchar 转换为 bigint 时出错_JavaScript数据类型的一些细节点

    ▲ 点击上方蓝字关注我 ▲文 / 景朝霞来源公号 / 朝霞的光影笔记ID / zhaoxiajingjing图 / 自己画 目录JS数据类型的一些细节点0 / JS 中的数据类型的一些细节点(1)JS ...

  3. Android JNI开发入门之一

    JNI在Android系统中有着广泛的应用.Android系统底层都是C/C++实现的,上层提供的API都是Java的,Java通过JNI调用底 层的实现.比如:Android API多媒体接口Med ...

  4. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  5. Android JNI开发摘录(五)之对象引用处理

    六.本机代码中的对象引用 终于讲到对象引用了,在此推荐JNI开发必看的 使用 Java Native Interface 的最佳实践 JNI提供了函数集来使用本机代码中的Java对象,包括前面已经介绍 ...

  6. 2020-11-12(JNI开发常见错误)

    JNI开发常见错误 a.Native method not found:com.itheim.hello.Mainactivity.hello_InC:()Ljava/lang/String: 可能出 ...

  7. 2020-11-11(C语言下JNI开发hello过程)

    jni _helloworld a.声明一个native方法,native方法不用实现 //通过native关键字 声明了一个本地方法, 本地方法不用实现 ,需要jni调用c的代码来实现 public ...

  8. 鸿蒙so系统,鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

    鸿蒙JNI开发现状 现阶段,不仅鸿蒙JNI相关的开发资料较少,而且Phone相关的JNI开发资料几乎没有,这对于新入行的鸿蒙开发者们来说,非常不友好. 也可能会给Android工程(使用了SO库的工程 ...

  9. Android JNI开发流程介绍

    1.什么是JNI JNI全称是Java Native Interface,中文称为Java本地接口.JNI是JAVA语言和C/C++语言沟通的协议,通过JNI,Java代码可以调用C.C++等语言写的 ...

  10. Android JNI开发生成.h头文件问题(转)

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

最新文章

  1. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
  2. JavaMelody+Spring+struts2配置详解——系统监控
  3. Asp.net 服务器端控件
  4. oracle故障级别划分,jfinal 2.2 oracle 事务级别问题
  5. 关于FastStone Capture for Windows在Windows10英文系统下的中文乱码问题
  6. python 定时自动爬取_python实现scrapy爬虫每天定时抓取数据的示例代码
  7. SpringMVC那点事
  8. 如何在SQL Server数据库中加密数据
  9. mysql 之 sql管理数据 二
  10. hadoop系列一:hadoop集群安装
  11. STM32驱动WS2811
  12. Score UVA - 1585
  13. 锁定计算机后等于睡眠吗,详细教你电脑休眠和睡眠的区别
  14. 3D游戏引擎的Web化
  15. mysql rand 范围_MySQL的指定范围随机数函数rand()的使用技巧
  16. AS3动画效果常用公式
  17. 产品生命周期管理(PLM)的内涵
  18. 你还要我怎样计算机音乐,你还要我怎样是什么歌抖音?
  19. 2016年阿里校园招聘笔试题--系统工程师
  20. c用栈实现逆波兰计算器

热门文章

  1. 各种符号用英语怎么念
  2. Echarts X轴类型为time时,X轴标签的细化(年月日时分秒)
  3. SSD(Single Shot MultiBox Detector)不得不说的那些事
  4. PhotoBulk for Mac v2.3 图片批量调整重命名转换水印工具
  5. 【c++】Lanelet2 Examples笔记(一)
  6. 英雄对决服务器未响应,lol点开始游戏没反应怎么办 完整解决办法一览
  7. 实践丨分布式事务解决方案汇总:2PC、消息中间件、TCC、状态机+重试+幂等
  8. Excel数值函数(4):对指定条件的单元格求和
  9. C语言细看从头|内存清空函数
  10. MacBook的分屏