Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中公共静态变量的生命周期是什么?_Java_Android_Android Activity_Static_Global Variables - Fatal编程技术网

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
is
true
,或者应用程序已被销毁其
false

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

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

现在,用户播放,并在某个点点击主页按钮或开关 到其他应用程序。过了一段时间,用户回到我的游戏, 从最近的应用程序启动它,这将打开游戏,让他们 左起,即直接在第二个(游戏)活动中,用户 高兴地继续玩

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

那么

  • 如果设备内存不足,且应用程序处于后台
  • 只需Android系统杀死您的应用程序进程以保持其他应用程序的运行状态,您就可以获得变量no state reserved的默认值

  • 如果电池电量不足和其他异常情况下,哪个设备处于关闭状态
  • 只需启动设备,用户就必须从开始启动应用程序,并且变量并没有持久状态,它只有默认值

    所以,在这种情况下,应用程序会将变量值保留到应用程序运行,并在系统上分配了内存空间(设备RAM上的应用程序运行空间)

    解决方案:


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

    不完全如此。如果游戏不是第一个活动,用户可以直接从recents菜单启动它,如果应用程序由于内存不足而被终止,那么这些变量将不会保留它们的值。如果您依赖于这些全局变量被正确设置,那么这可能是一个真正的问题-它们要么需要被持久化到磁盘,要么您需要检测到这是一次重新启动,而您没有自己的值,并使用CLEAR_TOP标志重新启动您的初始活动。@Levon-您的问题中有什么我遗漏的吗?或者你无法从我的答案中理解?谢谢用户370305,我理解了你的答案并接受了它。最终,我决定不在全局变量中存储任何内容,而是使用SharedReference持久化这些值。这样,我就可以在任何其他活动中,无论是在同一个会话中,还是在应用程序重新启动之间,始终恢复它们。