【问题标题】:If any static variables are destroyed, are they all destroyed?如果任何静态变量被破坏,它们是否都被破坏了?
【发布时间】:2013-07-15 00:50:18
【问题描述】:

如果有任何静态变量被销毁,它们是否都被销毁了?这是我在OnCreate 方法中的代码:

if (!LoadedData)
{
    LoadedData = true;
    SaveData = getSharedPreferences(FILENAME, MODE_PRIVATE);
    LoadData();
    if (MainActivity.ScreenWidth == 0 && MainActivity.ScreenWidthLandscape == 0)
        MainActivity.LoadData();
}

我的类第一次运行时,LoadedData 将具有默认值 false,导致保存的任何值都被加载并存储在静态变量中。设备旋转后,此代码将无法运行,因为所需的所有值都保存在静态变量中,因此再次加载它们效率低下。问题是,如果一些静态变量被破坏,但不是全部,那么我的程序可能会崩溃。当静态变量被销毁时,它们会保持默认值吗?例如整数 = 0,布尔 = false 等。

我无法测试静态变量是否被破坏。

【问题讨论】:

    标签: java android static null destroy


    【解决方案1】:

    检查一个类的静态变量将告诉您该类是否已被销毁。这意味着您可以知道该类中的其他变量是否仍然正常。它不会告诉您其他类中的其他静态变量。

    如果LoadedData 已被销毁,那将是因为没有引用包含它的类。该类已完成并已收集垃圾。当系统再次加载时,整个类将被重新初始化。

    【讨论】:

    • 完美!然后我的代码将正常工作,因为LoadData() 仅从当前类加载静态变量,并且当MainActivity 中的静态变量被销毁时,这将返回true:if (MainActivity.ScreenWidth == 0 && MainActivity.ScreenWidthLandscape == 0)。我只需要把支票移到这一行之前:if (!LoadedData)。感谢您的帮助
    【解决方案2】:

    当您的设备被 Android 旋转或销毁时,您的整个应用程序将被销毁,并且所有变量都需要重新初始化。

    【讨论】:

    • 当我的设备旋转时,静态变量会被保留。我的程序非常适合轮换。问题是,如果我的应用程序被中断并且手机内存不足,静态变量可能会被破坏。检查我的一个静态变量的值是否足以确定它们是否已被破坏?如果静态变量LoadedData被销毁了,我所有的静态变量是否都会有默认值,包括MainActivity.ScreenWidthMainActivity.ScreenWidthLandscape
    【解决方案3】:

    我不认为完整的应用程序会被破坏。我认为它只是活动。然后重新启动该 Activity。

    到你的变量。如果它们是您的类的成员变量,那么它们会在类完成时被销毁(被销毁)。 否则(变量不是任何类的成员)您可能会考虑将它们作为类变量,因为全局变量不是好的代码。

    【讨论】:

    • 我所有的静态变量都是类变量。我读过一些不同的资料,当应用程序中断并且内存变低时,静态变量可能会被破坏。问题是我遇到了需要编写代码但无法测试的情况。
    猜你喜欢
    • 2018-02-26
    • 2012-07-24
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2020-01-08
    • 2010-11-22
    相关资源
    最近更新 更多