android - android是否保存静态变量?

标签 android android-lifecycle static-variables

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

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

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

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

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

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

String 1
String 2
String 1
String 2

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

最佳答案

希望对您有帮助:

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

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

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

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

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

有关更多详细信息:阅读此链接中 Samuh 的答案... Click Here

关于android - android是否保存静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050489/

相关文章:

Android mediaplayer 单例服务不会停止播放

android - 关于生命周期方法定义的问题

java - 如何使用 ProcessLifecycleOwner 捕捉生命周期事件?

android - Activity 生命周期图与生命周期描述的矛盾

c++ - 未命名命名空间优于静态命名空间?

c++ - 在 Visual Studio 2017 中创建的简单 DLL 不会在 XP 中加载

android - 从另一个应用程序关闭一个应用程序

java - WebRTC,捕获屏幕

android - 构建工作空间,构建过程中发生错误

python - 静态类成员python