5

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

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

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

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

如果我使用“主页”按钮离开应用程序并重新进入应用程序,则 arrayList 仅包含两个元素:“字符串 1”和“字符串 2”。(这是所需的行为)

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

String 1
String 2
String 1
String 2

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

4

3 回答 3

12

可以帮助您:

让我们从一些背景知识开始:启动应用程序时会发生什么?

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

静态变量的生命周期:静态变量在类被加载时存在,JVM在类被卸载时死亡。

因此,如果您创建一个 android 应用程序并初始化一个静态变量,它将一直保留在 JVM 中,直到发生以下情况之一:
1. 类被卸载
2. JVM 关闭
3. 进程终止

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

更多详情:在此链接中阅读Samuh的答案...点击这里

于 2013-08-05T04:27:40.713 回答
2

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

有关详细信息,请参阅管理活动生命周期

编辑:

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

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

于 2013-08-05T04:18:48.603 回答
0

静态变量与一个类相关联,只要类在内存中,它们就会存在,并在类被卸载时销毁(这种情况很少发生)。它可能发生在——

 -You force stop your app.
 -Application crashes.
 -You clear your app data.
 -Switch off your Device(Shutdown DVM).
于 2013-08-05T06:11:55.250 回答