如何处理“JNI警告:0x44f81e80不是有效的JNI参考”

时间:2013-04-12 05:43:39

标签: android android-ndk java-native-interface

我正面临崩溃

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

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

char isValid = (env)IsValidJNIRef(myjobject);

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

jobjectRefType GetObjectRefType(JNIEnv* env, jobject obj);

返回以下枚举值之一,定义为jobjectRefType

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

请注意,您不能在已删除的参考号上使用此功能 - 未指定GetObjectRefType将为已删除的参考号返回的值。

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