参数 返回值 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