Android中的公共静态变量的生命周期是多少?

时间:2015-03-05 22:25:42

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

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

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

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

TheGlobals.IsFullGame = true; 

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

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

我是否正确假设此时,我的全局静态变量的值可以是True或False,具体取决于流程是否被销毁,或者是否保证Android将恢复其值。我想如果进程保持活动状态,那么值将保持为True(因为它是在第一个活动中设置的)并且只要进程保持活动就会保留;或者如果进程被销毁,并且用户稍后再回来,并在第二个(Game)活动中直接打开我的游戏,那么全局静态变量的值将默认为False(就像它& #39;在类级别定义,并且没有机会在第一个活动中设置。)

感谢您的任何评论。

2 个答案:

答案 0 :(得分:5)

  

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

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

  

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

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

现在怎么样,

  1. 如果设备存在内存不足问题而您的应用程序处于后台运行
  2. 简单的Android系统会终止您的应用程序进程以保持其他应用程序运行状态,并且您获得的变量的默认值没有保留状态

    1. 如果电池电量不足以及其他设备关闭的特殊情况怎么办
    2. 只需启动设备,用户必须从开始启动应用程序,并且没有变量的持久状态,它只有默认值。

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

      解决方案:

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

答案 1 :(得分:0)

Afaik整个程序是否清除。因此,如果用户可以返回到游戏界面IsFullGame true,或者该应用已被销毁false