【问题标题】:What is the life cycle of a public static variable in Android?Android中公共静态变量的生命周期是什么?
【发布时间】:2015-03-05 22:25:42
【问题描述】:

我有一个简单的类来保存一些变量,以便在我的游戏中的活动之间共享它们,例如:

public class TheGlobals {
  public static boolean IsFullGame = false;
}

现在,当游戏启动时,初始活动是 MainMenu,它确定用户是否购买了完整游戏,并相应地设置变量。例如,如果用户购买了游戏,它会这样做

TheGlobals.IsFullGame = true; 

到目前为止一切顺利。从这里,用户单击 Play 并切换到发生主要游戏动作的 Game 活动。在第二个(游戏)活动中,有几个地方我通过访问该全局静态变量来检查它是否是完整/购买的游戏,并相应地启用或禁用某些功能。

现在,用户玩游戏并在某些时候点击 Home 按钮或切换到其他应用。一段时间后,用户回到我的游戏,从最近的应用程序启动它,这会打开他们离开的游戏,直接在第二个(游戏)活动中,用户愉快地继续玩。

我是否正确假设在这一点上,我的全局静态变量的值可以是 True 或 False,这取决于进程是否被破坏,或者是否有任何保证 Android 将恢复其值。我在想,如果进程保持活动状态,那么该值将保持为 True(就像在第一个活动中设置的那样)并且只要进程保持活动状态就会被保留;或者如果进程被破坏,并且用户稍后返回它,并直接在第二个(游戏)活动中打开我的游戏,那么在这种情况下全局静态变量的值将默认为 False(就像它在类上定义的一样级别,并且没有机会在第一个活动中设置)。

感谢任何cmets。

【问题讨论】:

    标签: java android android-activity static global-variables


    【解决方案1】:

    我是否正确假设在这一点上,我的全球价值 静态变量可以是 True 或 False,取决于是否 进程是否被破坏,或者是否有任何保证Android 将恢复其价值。我在想,如果保持这个过程 活着,那么该值将保持为真(因为它是在第一个 活动)并且只要进程保持活动状态就会被保留;或者 如果进程被破坏,用户稍后返回,并且 直接在第二个(Game)活动中打开我的游戏,然后是全局 在这种情况下,静态变量的值将默认为 False(就像 它是在班级级别定义的,并且没有机会被设置 第一个活动)。

    是的,你是对的。此时进程为Android应用进程。 运行它的应用程序进程仍然对变量 TheGlobals.IsFullGame 具有持久值。

    现在,用户播放并在某些时候点击 Home 按钮或开关 到其他应用程序。一段时间后,用户回到我的游戏, 从最近的应用程序启动它,这会打开他们所在的游戏 离开,即直接在第二个(游戏)活动中,用户 愉快地继续玩。

    因为您的应用程序在后台任务中可用意味着应用程序进程正在运行,因此您获得了正确的值。

    现在怎么样,

    1. 如果设备存在内存不足问题并且您的应用程序在后台

    只需 Android 系统杀死您的应用程序进程以保持其他应用程序运行状态,并且您将获得变量的默认值不保留状态

    1. 如果设备电量不足和其他异常情况已关闭,该怎么办

    只需启动设备,用户必须从头开始启动您的应用程序,并且您的变量没有持久状态,它只有默认值。

    因此,在这种情况下,您的应用程序会保留变量值,直到您的应用程序运行并且它已在系统上分配内存空间(设备 RAM 上的应用程序运行空间)

    解决方案:

    您必须保留应用程序变量的值,直到应用程序的生命周期意味着应用程序未从设备上卸载,因此最好使用SharedPreference 来存储您的变量值,该变量值在您通过应用程序更改之前保持持久性。

    【讨论】:

    • @Levon - 我从你的问题中遗漏了什么吗?还是您无法从我的回答中理解?
    • 感谢 user370305,我理解您的回答并接受了它。最终,我决定不将任何内容存储在全局变量中,而是使用 SharedPreferences 持久化这些值。这样我就可以在任何其他活动中恢复它们,无论是在同一会话中还是在应用重新启动之间。
    【解决方案2】:

    Afaik 整个程序是否已清除。所以如果用户可以回到游戏画面IsFullGame就是true,或者app已经被销毁了它的false

    【讨论】:

    • 不完全。如果游戏不是第一个活动,用户可以直接从最近菜单启动它,如果应用程序由于内存不足而被终止,这些变量将不会保留它们的值。如果您依赖于正确设置这些全局变量,这可能是一个真正的问题——它们要么需要持久保存到磁盘,要么您需要检测它重新启动并且您没有您的值,然后使用 CLEAR_TOP 重新启动您的初始活动标志。
    猜你喜欢
    • 2012-08-24
    • 2013-07-27
    • 2019-04-09
    • 2011-09-12
    • 2015-12-02
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多