android保存静态变量吗?

时间:2013-08-05 04:13:28

标签: android android-lifecycle static-variables

我正在编写一个简单的android应用程序,它基本上是对android文档中可用的片段演示的修改。 在应用程序中,有一个名为Ipsum.java的文件,它有一个名为Headlines的字符串静态ArrayList。

在main活动的onCreate()方法中,我有以下代码,它将一些元素添加到数组列表中。

    if (savedInstanceState == null){
        Ipsum.Headlines.add("String 1 ");
        Ipsum.Headlines.add("String 2");
    }

savedInstanceState是系统传递给方法的Bundle,如果应用程序正从某个非活动状态恢复。逻辑是如果savedInstanceState为null,则应用程序不会被恢复,而是作为新实例启动。

如果我使用“主页”按钮离开应用程序并重新输入应用程序,则arrayList只包含两个元素:“String 1”和“String 2”。 (这是理想的行为)

但是,如果我使用后退按钮离开应用程序,然后重新进入应用程序,则“字符串1”和“字符串2”元素再次 添加 。然后该数组有4个元素。

String 1
String 2
String 1
String 2

(可以看到arrayList的内容,因为它们用于填充listView) 当按下后退按钮时,应用程序似乎正在存储静态数组列表的内容..并且当重新启动应用程序时,Bundle不会传递给onCreate()方法。在应用程序生命周期方面,有人能解释一下这里发生了什么吗?

3 个答案:

答案 0 :(得分:10)

愿这可以帮到你:

让我们从一些背景知识开始:启动申请时会发生什么?

操作系统启动一个进程并为其分配一个唯一的进程ID并分配一个进程表。一个进程启动一个DVM实例(Dalvik VM);每个应用程序都在DVM中运行。 DVM管理类加载卸载,实例生命周期,GC等。

静态变量的生命周期:当一个类由JVM加载时,静态变量就会存在,并在卸载该类时死亡。

因此,如果您创建一个Android应用程序并初始化一个静态变量,它将保留在JVM中,直到出现以下情况之一:
1.班级卸下了 2. JVM关闭了 3.过程终止

请注意,当您切换到另一个应用程序的其他活动时,静态变量的值将保持不变,并且上述三个活动都不会发生。如果上述三种情况中的任何一种发生,静电将失去其价值。

详情:在此链接中阅读 Samuh 的答案... Click Here

答案 1 :(得分:2)

您的活动正在恢复。如果您想控制发生的情况,请实施onResume()

有关详细信息,请参阅Managing the Activity Lifecycle

编辑:

静态变量是Java概念。 static只意味着整个类只有一个变量副本。另一种选择是每个对象都有自己的副本。

因此,当您的代码正在运行时,您只需在程序中拥有变量的一个副本。它不会在任何地方保存,除非您添加代码来执行此操作。

答案 2 :(得分:0)

静态变量与类相关联,只要类在内存中,它们就会存在,并且在类被卸载时会破坏(很少发生)。它可能发生在 -

 -You force stop your app.
 -Application crashes.
 -You clear your app data.
 -Switch off your Device(Shutdown DVM).