Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态变量作为全局变量,静态对象何时被垃圾收集?_Java_Android_Static_Global - Fatal编程技术网

Java 静态变量作为全局变量,静态对象何时被垃圾收集?

Java 静态变量作为全局变量,静态对象何时被垃圾收集?,java,android,static,global,Java,Android,Static,Global,我想访问android应用程序中的任何位置的变量,即使我从未打开以查看声明该变量的活动类。是可用于此目的的静态变量。如果我在不同的活动之间移动,我可以访问这个变量来修改和更改它而不丢失更改吗 我知道共享首选项和sqlite数据库可以用于存储变量,但我想知道我是否可以安全地使用一个静态变量。我唯一担心的是,由于某种原因,当应用程序仍在使用时,静态变量将在应用程序打开和使用时被垃圾收集 另外,我不想让应用程序类成为全局变量,而是想知道如何在应用程序的java或android类中使用静态变量。加载类时

我想访问android应用程序中的任何位置的变量,即使我从未打开以查看声明该变量的活动类。是可用于此目的的静态变量。如果我在不同的活动之间移动,我可以访问这个变量来修改和更改它而不丢失更改吗

我知道共享首选项和sqlite数据库可以用于存储变量,但我想知道我是否可以安全地使用一个静态变量。我唯一担心的是,由于某种原因,当应用程序仍在使用时,静态变量将在应用程序打开和使用时被垃圾收集


另外,我不想让应用程序类成为全局变量,而是想知道如何在应用程序的java或android类中使用静态变量。

加载类时,静态变量不能用于垃圾收集。当相应的类加载器丢弃该类或将其自身收集为垃圾时,可以收集它们。

加载该类时,静态变量不能进行垃圾收集。当相应的类加载器丢弃该类或将其自身收集为垃圾时,可以收集它们。

静态变量不符合垃圾收集的条件,直到包含的类仍在JVM中加载。此类变量由类装入器引用的类对象引用。只有在两种非常罕见的情况下,如果类加载器以某种方式删除了类,或者类加载器本身有资格进行垃圾收集,那么只能对它们进行垃圾收集

更多详细信息,请访问:

当且仅当类或接口的定义类 如中所述,垃圾收集器可以回收装载器 §12.6. 引导加载程序加载的类和接口可能不可用 卸货


在包含类保持在JVM中加载之前,静态变量不符合垃圾收集的条件。此类变量由类装入器引用的类对象引用。只有在两种非常罕见的情况下,如果类加载器以某种方式删除了类,或者类加载器本身有资格进行垃圾收集,那么只能对它们进行垃圾收集

更多详细信息,请访问:

当且仅当类或接口的定义类 如中所述,垃圾收集器可以回收装载器 §12.6. 引导加载程序加载的类和接口可能不可用 卸货

引自帖子:

静态字段作为一个整体附加到类实例,即 依次附加到加载类的类加载器。 整个类加载器运行时,将卸载\u实例 回收。我有90%的把握当Android破坏应用程序时会发生这种情况 (不是当它进入背景或暂停时,而是完全停止 关闭。)

根据您的需要,首先尝试使用全局变量,但我认为这里最好的方法是使用SharedReferences(这只是我的意见),但如果它适合您的模型,这是当然的。

引用线程:

静态字段作为一个整体附加到类实例,即 依次附加到加载类的类加载器。 整个类加载器运行时,将卸载\u实例 回收。我有90%的把握当Android破坏应用程序时会发生这种情况 (不是当它进入背景或暂停时,而是完全停止 关闭。)


根据您的需要,首先尝试使用全局变量,但我认为最好的方法是使用SharedReferences(只是我的意见),但是,如果它适合您的模型,这是当然的。

是的,您可以使用静态变量,不建议使用静态变量,因为您的所有活动都必须有一个包含该静态变量的类的引用(这意味着您的代码将紧密耦合!)


“正确”的方法是在活动之间传递变量或使用sqlite(如您所述)。

是的,您可以使用静态变量,不建议使用静态变量,因为您的所有活动都必须有一个包含该静态变量的类的引用(这意味着您的代码将紧密耦合!)


“正确”的方法是在活动之间传递变量或使用sqlite,就像您提到的那样。

创建一个类AppConstants。然后创建静态变量,如下所示: 公共静态字符串name=“zz”;
然后访问Appconstants.name等任意位置,创建一个类Appconstants。然后创建静态变量,如下所示: 公共静态字符串name=“zz”;
然后访问Appconstants.name等任意位置,下面的线程提供了此问题的答案。[静态变量ad垃圾回收][1][1]:以下线程提供了此问题的答案。[静态变量ad垃圾回收][1][1]: