根据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;
}
IMO,如果您使用默认填充而不是使用类加载器,则对MyClass
应用程序其他类中的任何方法或字段的引用都足以防止对MyClass
;的卸载。只是不要打扰。
在实践中可能发生的情况是杀死一个进程并将其重新启动,在这种情况下,所有静态变量都将被设置为其初始值(这就是为什么Activity在将来使用Bundles而不是静态变量将数据传递给它们的原因)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句