将在本机代码中缓存jclass,以防止该类被卸载

weiclin

根据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;
}
18446744073709551615

IMO,如果您使用默认填充而不是使用类加载器,则对MyClass应用程序其他类中的任何方法或字段的引用都足以防止对MyClass;的卸载只是不要打扰。

在实践中可能发生的情况是杀死一个进程并将其重新启动,在这种情况下,所有静态变量都将被设置为其初始值(这就是为什么Activity在将来使用Bundles而不是静态变量将数据传递给它们的原因)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用js在gif中添加时间戳以防止缓存

防御代码,以防止父子层次结构中的无限递归

刷新缓存以防止基准波动

如果问号已经存在,如何在URL中添加随机字符串以防止缓存?

Meteor 中 chokidar 的使用示例以防止错误:Meteor 代码必须始终在 Fiber 中运行

如何清理HTML代码以防止Java或JSP中的XSS攻击?

如何围绕对象状态设计系统以防止代码和后端中的重复机制?

如何处理文本字符串中的PHP代码,以防止将其视为文本?

是否可以防止将带有响应标头“ Cache-Control:Private”的文件缓存在NSURLCache中?

是否可以启用本机代码缓存?

调用“ CallIntMethod(jclass,jmethodId,...)时,JNI代码中的分段错误

是否可以防止Javascript中的popstate?

UITableViewCell中的UITextView可以防止Segue

触发以防止从表中删除

触发以防止在PostgreSQL中更新

如何从内存(iOS)中卸载本机图像?

在FFI模块中是否有必要将字符串传递回调用代码以防止内存泄漏?

为什么我需要将我的源代码保留在Proguard Rules中以防止崩溃?

我可以防止Babel遍历插件插入的代码吗?

JSF标准验证可以防止代码注入吗?

使用 fflush 加速代码以防止超出时间限制

如果卸载应用程序,本机反应如何运行代码

防止Chrome中的iframe缓存

防止Webpack 3.6中的缓存

如何在Asp.net C#MVC中缓存数据库表以防止许多数据库查询

如何防止在React Components中卸载?

太多的重新渲染。React 限制渲染次数以防止无限循环 | 反应本机

如何配置cloudfoundry静态文件buildpack以防止发布后从浏览器缓存加载

有没有一种方法可以防止在html中重复代码我正在使用bootstrap 4在一页中折叠20次