Java Android中公共静态变量的生命周期是什么?
我有一个简单的类来保存一些变量,以便在游戏中的活动之间共享它们,例如:Java Android中公共静态变量的生命周期是什么?,java,android,android-activity,static,global-variables,Java,Android,Android Activity,Static,Global Variables,我有一个简单的类来保存一些变量,以便在游戏中的活动之间共享它们,例如: public class TheGlobals { public static boolean IsFullGame = false; } 现在,当游戏启动时,初始活动是MainMenu,它确定用户是否购买了完整的游戏,并相应地设置变量。例如,如果用户购买了游戏,就可以了 TheGlobals.IsFullGame = true; 到目前为止还不错。从这里,用户单击Play并切换到主要游戏动作发生的游戏活动。在第二
public class TheGlobals {
public static boolean IsFullGame = false;
}
现在,当游戏启动时,初始活动是MainMenu,它确定用户是否购买了完整的游戏,并相应地设置变量。例如,如果用户购买了游戏,就可以了
TheGlobals.IsFullGame = true;
到目前为止还不错。从这里,用户单击Play并切换到主要游戏动作发生的游戏活动。在第二个(游戏)活动中,有几个地方我通过访问全局静态变量来检查它是否是完整/购买的游戏,并相应地启用或禁用某些功能
现在,用户开始玩游戏,并在某个时候点击主页按钮或切换到其他应用程序。一段时间后,用户返回到我的游戏,从最近的应用程序启动它,打开他们停止的游戏,直接进入第二个(游戏)活动,用户愉快地继续玩
在这一点上,我假设全局静态变量的值可以是真的,也可以是假的,这取决于进程是否被破坏,或者是否有任何保证Android将恢复其值。我认为,如果流程保持活动状态,那么该值将保持为真(正如在第一个活动中设置的那样),并且只要流程保持活动状态,该值就会被保留;或者,如果进程被破坏,用户稍后返回,并在第二个(游戏)活动中直接打开我的游戏,那么在这种情况下,全局静态变量的值将默认为False(就像在类级别上定义的一样,并且不可能在第一个活动中设置)
谢谢您的评论。请确认是否清除了整个程序。因此,如果用户可以返回游戏屏幕
IsFullGame
istrue
,或者应用程序已被销毁其false
在这一点上,我的全球价值
静态变量可以是True或False,具体取决于
进程是否被破坏,或者是否有任何保证Android
将恢复其价值。我在想,如果这个过程继续下去
如果处于活动状态,则该值将保持为真(正如在第一个
活动),并且只要过程保持活动,就可以得到保存;或
如果进程被破坏,用户稍后返回,并且
在第二个(游戏)活动中直接打开我的游戏,然后打开全局
在这种情况下,静态变量的值将默认为False(就像
它是在类级别上定义的,没有被设置的机会
第一项活动)
是的,你是对的。此时,进程是Android应用程序进程。
运行它的应用程序进程仍然具有变量TheGlobals.IsFullGame
的持久值
现在,用户播放,并在某个点点击主页按钮或开关
到其他应用程序。过了一段时间,用户回到我的游戏,
从最近的应用程序启动它,这将打开游戏,让他们
左起,即直接在第二个(游戏)活动中,用户
高兴地继续玩
因为您的应用程序在后台任务中可用意味着应用程序进程正在运行,所以您将获得正确的值
那么
您必须保留应用程序变量的值,直到应用程序的生命周期意味着直到应用程序未从设备上卸载为止,因此最好使用存储变量值,这些变量值在您通过应用程序进行更改之前保持持久性。不完全如此。如果游戏不是第一个活动,用户可以直接从recents菜单启动它,如果应用程序由于内存不足而被终止,那么这些变量将不会保留它们的值。如果您依赖于这些全局变量被正确设置,那么这可能是一个真正的问题-它们要么需要被持久化到磁盘,要么您需要检测到这是一次重新启动,而您没有自己的值,并使用CLEAR_TOP标志重新启动您的初始活动。@Levon-您的问题中有什么我遗漏的吗?或者你无法从我的答案中理解?谢谢用户370305,我理解了你的答案并接受了它。最终,我决定不在全局变量中存储任何内容,而是使用SharedReference持久化这些值。这样,我就可以在任何其他活动中,无论是在同一个会话中,还是在应用程序重新启动之间,始终恢复它们。