也不是很确定,前段时间的代码没有出问题,但是今天调试了半天,一直崩溃:vm aborting。

以前的部分代码:

 1 JNIEXPORT void JNICALL XXX
 2   (JNIEnv* env,jobject thiz, jobject bitmap, jbyteArray databuf, jint width, jint height)
 3 {
 4     jboolean* pArraydata = (jboolean*)env->GetPrimitiveArrayCritical(databuf, 0);
 5     AndroidBitmapInfo  info;
 6     int                ret;
 7     if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0)
 8     {
 9        XXX;
10     }
11     if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888)
12     {
13       XXX;
14     }
15     if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0)
16     {
17        XXX;
18     }
19     AndroidBitmap_unlockPixels(env, bitmap);
20     env->ReleasePrimitiveArrayCritical(databuf, pArraydata, 0);
21 }    

后来发现不用bitmap的这些代码程序没错,或者注释掉GetPrimitiveArrayCritical的相关代码程序也没错。但是两者同时出现的话,程序就崩溃。

之后想到不使用GetPrimitiveArrayCritical,换成别的代码试一下。

1     unsigned char isCopy;
2     jbyte* pArrayimgdata = env->GetByteArrayElements(databuf,&isCopy); % 此处是否使用isCopy都没关系,只要和最后release对应上就行。3   if ((ret = AndroidBitmap_getInfo(env, bitmaps, &info)) < 0) 4    {
5       XXX;
6     }
7     XXX;
8     env->ReleaseByteArrayElements(databuf,pArrayimgdata,isCopy);

程序就不会崩溃了。

ps:仍旧没有弄懂为什么以前的代码可以用,今天就不能用了(当然,以前的代码中还有别的代码,今天的只使用了该部分代码)。

(原)JNI中env-GetByteArrayElements和AndroidBitmap_getInfo的冲突相关推荐

  1. JNI中String和char之间的相互转换

     最近在学习NDK下的opengl es2.0开发,看过很多demos都是直接用一串字符串把shader代码写死的.并没有用一个单独的shader脚本语言文件.glShaderSource()这个 ...

  2. JNI中参数的传递与操作

    Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章: 利用 ...

  3. Java笔记-JNI中Java与C语言解决中文乱码问题

    目录 基本概念 演示过程 基本概念 这里我把他总结成4个步骤: 1. 找类,Java的String: 2. 找函数String类的方法,成员函数: 3. 设置要转换的字符和编码: 4. 程序生成编码后 ...

  4. 【JNI】JNI中java类型的简写

         在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示 ...

  5. JNI中C调用Java方法

     我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...

  6. Java Native Interface 六JNI中的异常

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...

  7. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  8. JNI中java类型的简写

      在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示成员变 ...

  9. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  10. android+jni+构造函数,在JNI中调用构造函数失败Android

    我想从我的JNI Android代码调用构造函数;但不知何故,它失败,以下例外.. 我相信我失去了一些非常小的东西;但我无法弄清楚......任何人都可以请指出?在JNI中调用构造函数失败Androi ...

最新文章

  1. 转换字符串中汉字为其拼音缩写(C#)
  2. R语言ggplot2绘制平滑曲线的折线图简单小例子
  3. Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探
  4. ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)
  5. 【软考-软件设计师】计算机安全
  6. [Debug]IOS微信浏览器不支持form表单的target=_blank
  7. Python基础——PyCharm版本——第七章、面向对象编程
  8. Java 并发(JUC 包-05)
  9. 让你的原创设计作品展示给世界|设计师的舞台
  10. 树莓派教程 - 2.2 树莓派CSI摄像头,raspivid、raspistill常用参数
  11. iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码
  12. install texlive-full on ubuntu
  13. python学习(十八)爬虫中加入cookie
  14. 新物联网时代的整合战略
  15. C#中索引超出了数组界限如何解决
  16. 速锐得驾培驾考免接线OBD数据价值及发展思路
  17. linux 搭建文件服务器(vsftpd)
  18. oracle服务名XDB_Oracle XDB和XPT
  19. JNI 方法大全及使用示例
  20. 【文件类型转换】.mat后缀文件 转化为 .xml后缀文件

热门文章

  1. python中copy怎么用_python中的拷贝copy模块怎么使用?
  2. kudu接受kafka消息_Kafka入门详解
  3. Verilog初级教程(23)Verilog仿真中的显示任务
  4. FPGA设计心得(4)Aurora IP core 的定制详情记录
  5. 【 压缩感知 】OMP恢复算法
  6. Xilinx IP核专题之PLL IP核介绍(Spartan-6)
  7. PlanAhead工具应用
  8. laravel5.5首次使用php artisan migrate注意问题:
  9. 阿里云Kubernetes实战2–搭建基础服务
  10. 在WPF中将图片转换成3D图像并可以旋转