2

我正面临崩溃

JNI WARNING : 0x44f81e80 is not a valid JNI reference, in Ldalvik/system/NativeStart;. run()v (GetObjectClass)

我发现一些帖子说使用 NewWeakGlobalRef 而不是 NewGlobalRef。但我正在我的代码中寻找验证。我只想知道是否有任何JNIapi 可以用来检查给定的参考是否jobject有效JNI?像未签名的东西

char isValid = (env)IsValidJNIRef(myjobject);

使用 isValid 的值,我可以设置一些条件来处理系统。

谢谢。

4

1 回答 1

1

您可以使用以下命令检查 obj 参数引用的作业对象的 ref 类型:

jobjectRefType GetObjectRefType(JNIEnv* env, jobject obj);

它返回以下定义为 a 的枚举值之一jobjectRefType

JNIInvalidRefType = 0,
JNILocalRefType = 1,
JNIGlobalRefType = 2,
JNIWeakGlobalRefType = 3

请注意,您不能在已删除的 ref 上使用它 - 未指定GetObjectRefType将为已删除的 ref 返回什么值。

请参阅:http ://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#objreftype

于 2013-04-15T21:50:15.367 回答