安卓中的公共静态变量生命周期是什么?

9

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

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

现在,当游戏启动时,初始活动是 MainMenu,它确定用户是否购买了完整版游戏,并相应地设置变量。例如,如果用户购买了游戏,它会执行以下操作:
TheGlobals.IsFullGame = true; 

到目前为止,一切都很好。从这里开始,用户点击“播放”并切换到游戏活动页面,主要的游戏操作将在此进行。在第二个(游戏)活动中,有几个位置我会检查是否为完整/已购买的游戏,通过访问全局静态变量,并相应地启用或禁用某些功能。
现在,用户玩游戏并在某个时候按下了Home按钮或切换到其他应用程序。过了一段时间,用户重新回到我的游戏,从最近的应用程序中启动它,直接打开第二个(游戏)活动,在那里离开的地方继续愉快地玩游戏。
我能否正确地假设此时我的全局静态变量的值可以是True或False,这取决于进程是否被销毁,或者Android是否保留其值。我认为如果进程保持活动状态,则该值将保持为True(正如在第一个活动中设置的那样)并在进程保持活动状态的同时得到保留;或者如果进程被销毁,并且用户稍后返回并直接在第二个(游戏)活动中打开我的游戏,则该全局静态变量的值将默认为False(就像在类级别上定义的一样,没有机会在第一个活动中进行设置)。
感谢您的任何评论。
2个回答

5
你的理解是正确的。此时进程是Android应用程序进程。只要你的应用程序进程在运行,变量TheGlobals.IsFullGame的值就是持久的。
现在,用户玩游戏并最终按下Home按钮或切换到其他应用程序。一段时间后,用户回到我的游戏,并从最近的应用程序中启动它,这将打开他们离开的地方,即直接进入第二个(游戏)活动,并且用户愉快地继续玩。
因为您的应用程序在后台任务中可用,这意味着应用程序进程正在运行,因此您可以获得正确的值。
现在考虑以下情况:
1. 如果设备存在低内存问题并且您的应用程序在后台运行
Android系统会简单地杀死您的应用程序进程,以保持其他应用程序的运行状态,并且您将获得变量的默认值,没有状态被保留。
2. 如果设备电量低或出现其他异常情况导致设备关闭
只需在设备启动时,用户必须从头开始启动您的应用程序,并且您的变量没有持久状态,仅具有默认值。
因此,在这些情况下,您的应用程序将保持变量值,直到您的应用程序运行并在系统上分配内存空间(设备RAM上的应用程序运行空间)。
解决方案:
你需要将应用程序变量的值保持持久化,直到应用程序被卸载为止,因此最好使用SharedPreference来存储变量值,这样可以保持持久性,直到你通过应用程序进行更改。

@Levon - 你的问题我有遗漏什么吗?还是你无法从我的回答中理解? - user370305
谢谢user370305,我理解了你的答案并接受了它。最终,我决定不将任何东西存储在全局变量中,而是使用SharedPreferences持久化这些值。这样我就可以在同一会话或应用程序重新启动时的任何其他活动中恢复它们。 - Levon

0
据我所知,整个程序已被清除或未被清除。因此,如果用户可以返回游戏屏幕,则IsFullGametrue,否则应用程序已被销毁,则其为false

1
不完全正确。如果游戏不是第一个活动,用户可以直接从最近的菜单启动它,如果应用程序由于内存不足而被杀死,这些变量将不会保留其值。如果您依赖这些全局变量的正确设置,这可能是一个真正的问题-它们需要被持久化到磁盘上,或者您需要检测到它是重新启动并且您没有您的值,并使用CLEAR_TOP标志重新启动您的初始活动。 - Gabe Sechan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接