JNI 笔记

参数 返回值 JNI入门这篇文章就够了(含demo) - 简书

Andorid Studio jni mk 编译demo 参考 https://github.com/zhuslon/JniHello

1.Java 创建 Native 对象,并持有
Matrix.java
public final long native_instance;
public Matrix() { native_instance = nCreate(0); }
//
private static native long nCreate(long nSrc_or_zero);
Matrix.cpp
//签名符号 J--->long
{"nCreate","(J)J", (void*) SkMatrixGlue::create}
static jlong create(JNIEnv* env, jobject clazz, jlong srcHandle) {
const SkMatrix* src = reinterpret_cast<SkMatrix*>(srcHandle);
SkMatrix* obj = new SkMatrix();
if (src) *obj = *src;
else obj->reset();
return reinterpret_cast<jlong>(obj);
}

2.释放native对象
4.4.1版本
Matrix.java
重写finalize 当系统回收java对象时候,调用native方法释放native对象
@Override
protected void finalize() throws Throwable {
try {
finalizer(native_instance);
} finally{
super.finalize();
}
}
Matrix.cpp
static void finalizer(JNIEnv* env, jobject clazz, SkMatrix* obj) { delete obj; }

9.0版本
Android | Bitmap的Java对象GC之后,对应的native内存会回收吗? - 简书
java 构造函数中加入内存回收辅助系统,初始化完native对象时候,进行内存回收注册
NativeAllocationRegistry

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值