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

以前的部分代码:

 JNIEXPORT void JNICALL XXX
(JNIEnv* env,jobject thiz, jobject bitmap, jbyteArray databuf, jint width, jint height)
{
jboolean* pArraydata = (jboolean*)env->GetPrimitiveArrayCritical(databuf, );
AndroidBitmapInfo info;
int ret;
if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < )
{
XXX;
}
if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888)
{
  XXX;
}
if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < )
{
XXX;
}
AndroidBitmap_unlockPixels(env, bitmap);
env->ReleasePrimitiveArrayCritical(databuf, pArraydata, );
}

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

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

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

程序就不会崩溃了。

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

(原)JNI中env->GetByteArrayElements和AndroidBitmap_getInfo的冲突的更多相关文章

  1. Jni中C++和Java的参数传递 参数对照

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

  2. Jni中C++和Java的参数传递

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

  3. Jni中C++和Java的参数传递(转)

    如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用VC++6.0实现JNI的最简单的例子 ...

  4. ZT ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01

    ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01 分类: 嵌入式 android framework 里java调用native,使用JNI机制,ja ...

  5. jni中调用java方法获取当前apk的签名文件md5值

    相应的java方法: void getsign(Context context) throws Exception { PackageInfo localPackageInfo = context.g ...

  6. Java Native Interface 六JNI中的异常

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

  7. Java Native Interfce三在JNI中使用Java类的普通方法与变量

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 前面我们学习了如何在JNI中通过参数来使用J ...

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

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

  9. JNI中C调用Java方法

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

  10. [Android Pro] Android studio jni中调用Log输出调试信息

    reference to : http://www.linuxidc.com/Linux/2014-02/96341.htm Android 开发中,java 可以方便的使用调试信息Log.i, Lo ...

随机推荐

  1. 判断两个View的GRect是否相等

    if (CGRectEqualToRect(self.view.frame, rect)) { // do some stuff }

  2. WCF入门教程系列一

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  3. Win8.1系统下安装nodeJS

    Nodejs简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js ...

  4. After a rest, go on

    busy during the whole May holiday. running between S and H, waste much time leaving things behind. t ...

  5. 十进制二进制之间的转化 PHP算法

    [ 十进制转二进制 ] function test($var){ $func = function($i){ if($i < 2){ return $i; } $return['int'] = ...

  6. sleep函数——Gevent源码分析

    gevent是一个异步I/O框架,当遇到I/O操作的时候,会自动切换任务,从而能异步地完成I/O操作 但是在测试的情况下,可以使用sleep函数来让gevent进行任务切换.示例如下: import ...

  7. Apple Catching(POJ 2385)

    Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9978   Accepted: 4839 De ...

  8. Azure上A/D系列虚拟机到DS系列迁移(2)

    11. 该脚本会检测环境,停止虚拟机,拷贝VHD文件,创建磁盘等等,知道出现如下类似画面,他会暂停等待用户操作: 后面这几个步骤非常重要,关系到你后续的创建是否成功: 12. 进入D:\migvm目录 ...

  9. web技术之图片预加载

    http://www.cnblogs.com/rt0d/archive/2011/04/17/2018646.html http://www.oschina.net/code/snippet_5437 ...

  10. ArcGIS API for Silverlight中专题地图的实现浅析

    原文http://www.gisall.com/html/32/7232-2418.html 专题地图是突出表现特定主题或者属性的地图.常见专题地图类型有唯一值渲染,分类渲染,柱状图,饼状图,点密度图 ...