JNI/NDK开发指南

对理解JNI有较大帮助,里面有很多之前不懂的细节
[ 1 JNI/NDK开发指南(二)——JVM查找java native方法的规则 ]
在Linux/Unix系统中,这两个宏可以省略不加:JNIEXPORT JNICALL
[ 2 JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系 ]
[ 3 JNI/NDK开发指南(四)——字符串处理 ]
jboolean unsigned 8 bits
jbyte       signed 8 bits
jchar       unsigned 16 bits
jshort      signed 16 bits
jint          signed 32 bits
isCopy一直以来,都用错了!!!
1> 访问字符串
2> 异常检查
3> 释放字符串
4> GetStringCritical和ReleaseStringCritical: 提高 JVM返回源字符串直接指针 的可能性
5> GetStringRegion和GetStringUTFRegion
分别表示获取Unicode和UTF-8编码字符串指定范围内的内容。 这对函数会把源字符串复制到一个预先分配的缓冲区内。
[ 字符串操作总结 ]:
其中:
2:本地代码不应在 JVM 内部分配新对象:为什么不能分配新对象???????
[ 5 JNI/NDK开发指南(五)——访问数组(基本类型数组与对象数组) ]
一、访问基本类型数组
二、访问对象数组
一维数组中套一维数组,就形成了一个所谓的二维数组。
[ 6 JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法 ]
一、callJavaStaticMethod静态方法实现说明
Android NDK环境与PC环境:
JVM与Android Dalvik虚拟机
问题:PC环境是指不用手机实际测试么???
二、callInstanceMethod实例方法实现说明
[ 7 JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量 ]
[ 8 JNI/NDK开发指南(八)——调用构造方法和父类实例方法 ]
这章详细来介绍下初始一个对象的两种方式,以及如何调用子类对象重写的父类实例方法。
下面通过一个示例来了解在JNI中是如何调用对象构造方法和父类实例方法的。
[9 JNI/NDK开发指南(九)——JNI调用性能测试及优化 ]
1 使用时缓存
例子1
例子2
注意:也就是说局部静态变量:
static jfieldID fid_str;
static jclass cls_string;
static jmethodID cid_string;
只有jclass属于局部引用,会被VM自动释放!!! 
见[ JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系 ],引用类型指的是jobject及其子类,包括:jstring jclass jthrowable jarray等.
2 类静态初始化缓存
[10 Android JNI局部引用表溢出:local reference table overflow (max=512)]
[11 JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用]
这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。
三种引用简介及区别:
[ 局部引用 ]
再次调用newString接口,cls_string变为野指针!!!
[全局 引用 ]
全局引用可以用static jclass来缓存
[弱全局 引用 ]
[12 JNI/NDK开发指南(十一)——JNI异常处理 ]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值