Android JNI 进阶(含完整 Demo)

GetObjectArrayElement解释:

在JNI 中只有基本类型和引用类型,String 是引用类型,所以遍历 String[]的时候,采用GetObjectArrayElement()来接收

  • 参数一:jobjectArray:所有的元素
  • 参数二:jsize:当前的位置

ReleaseIntArrayElements解释:

ReleaseIntArrayElements()方法是 C++通知 JNI 改变 java 的值,在代码中 java层 传递过来一个数组,然后修改完成后再返回给 java 层

  • 参数一:jintArray:java 传递过来的数组
  • 参数二:修改后的数组
  • 参数三:修改的模式,填 0 就好

ReleaseStringChars解释:

ReleaseStringChars是用来释放 JNI 内存的,虽然说不释放也可以,因为在方法结束的时候会弹栈,一旦弹栈就会自动释放内存,但是如果说一个方法中有 5000 行代码,在一直不释放,等待到 JNI 弹栈自动释放,那么就会引起 JNI 在调用该方法的时候占用空间略大(养成好习惯)

运行结果:

native 运行结果:
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数一为42
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数二为24.420000
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数三为1
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数四为李元霸
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数五为成龙
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数五为李小龙
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数五为松井宝
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数五为迪丽热巴
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 参数五为ohh
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 第六个参数为:101
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 第六个参数为:104
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 第六个参数为:102
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 第六个参数为:162
2021-04-28 17:36:22.217 6501-6501/com.example.jni E/szj: 第六个参数为:161

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值