gpt4 book ai didi

android - 在同一进程中运行的两个应用程序是否可以具有不同的 STATIC 对象值?

转载 作者:行者123 更新时间:2023-11-30 03:52:09 25 4
gpt4 key购买 nike

我创建了两个 Android 应用程序,它们共享相同的用户 ID (sharedUserId) 以及相同的进程。在第一个应用程序中,在启动时,我将一个静态 int 变量设置为 1(默认值为 0)。在第二个应用程序中,我从另一个应用程序加载(使用反射)相同的类并读取静态 int 变量。我读了 0。

由于两个应用程序都在同一个进程上运行,我希望它们共享相同的静态值,不是吗?谁能告诉我下面的机制是做什么的?(他们是否可能使用了不同的 apk/dex 加载器并导致了这种行为?)

最佳答案

原来答案是这样的....它与类加载器有关的是 Java,而不是进程或应用程序。

Java 语言:类由其完全限定名标识Java 虚拟机:类对象由其完全限定名称和定义的类加载器标识

由同一个类加载器加载的类的实例肯定会看到相同的静态变量。类加载器通常委托(delegate)给它的父类加载器。如果父级已经加载了该类,则不会再次加载它。可以通过编写自己的类加载器来更改此标准行为。结果是类加载器的层次结构只会加载一个类一次,因此分配静态变量并运行一次静态 block 。 但是,如果您有多个类加载器层次结构,则可以多次加载同一个类并多次分配静态成员。由不同的类加载器定义的两个类对象即使是从同一个类文件生成的也是不同的类型。由同一个类加载器加载的类的实例看到相同的静态变量。一个很好的引用是 Forman 和 Forman 撰写的 Java Reflection in Action 的第 6 章。

感谢 Chris Matawa 为我提供这篇文章的答案: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/8-b5T1zYr-8

关于android - 在同一进程中运行的两个应用程序是否可以具有不同的 STATIC 对象值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com