根据https://developer.android.com/training/articles/perf-jni.html:
在卸载类之前,类引用,字段ID和方法ID保证有效。只有在与ClassLoader关联的所有类都可以进行垃圾回收时才会卸载类
如果我保留了该类的全局引用,它是否会保证该类从未被卸载过?
static jclass g_classMyClass;
jint JNI_OnLoad(JavaVM *pJVM, void *reserved)
{
JNIEnv *pEnv;
if (pJVM->GetEnv((void**)&pEnv, JNI_VERSION_1_6) != JNI_OK) {
return -1;
}
jclass classMyClass = pEnv->FindClass("com/example/MyClass");
g_classMyClass = (jclass)pEnv->NewGlobalRef(classMyClass);
return JNI_VERSION_1_6;
}
答案 0 :(得分:0)
IMO,如果你使用默认的东西而不是使用类加载器,那么从应用程序的其他类引用MyClass
的任何方法或字段就足以防止MyClass
的卸载;只是不要打扰。
在实践中可能发生的是一个进程被终止并重新启动,在这种情况下,所有静态变量都将被设置为它们的初始值(这就是为什么活动使用Bundles而不是静态变量来将数据传递给自己)。