静态变量为全局,何时静态对象是垃圾回收?

时间:2013-07-02 06:40:01

标签: java android static global

我想在Android应用程序的任何地方访问变量,即使我从未打开过查看变量声明的Activity类。是否可以使用静态变量。如果我在不同的活动之间移动,我可以访问此变量来修改和更改它而不会丢失更改吗?

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

我也不想创建一个Application类全局变量,而是想知道在应用程序的java或android类中使用静态变量。

5 个答案:

答案 0 :(得分:1)

加载类时,静态变量不能用于垃圾回收。当相应的类加载器丢弃类或者自己收集垃圾时,可以收集它们。

答案 1 :(得分:0)

静态变量不适用于垃圾收集,直到包含的类仍然在JVM中加载。这些变量由ClassLoaders引用的Class对象引用。如果ClassLoader以某种方式丢弃Class或者ClassLoader本身有资格收集,那么Tehy只能在两种非常罕见的情况下进行垃圾收集。

来自JLS § 12.7的更多详情:

  

当且仅当其定义类时,才可以卸载类或接口   如下所述,垃圾收集器可以回收加载器   §12.6。引导加载程序加载的类和接口可能不会   被卸下。

答案 2 :(得分:0)

来自帖子here的引用:

  

静态字段作为一个整体附加到Class实例,即   反过来附加到加载类的ClassLoader。   当整个ClassLoader出现时,将卸载the_instance   回收。我90%肯定当Android破坏应用程序时会发生这种情况   (不是当它进入后台,或暂停,但完全是   关闭。)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

创建一个AppConstants类。然后创建您的静态变量: public static String name =“zz”; 然后访问Appconstants.name

之类的任何地方