Android中公共静态变量的生命周期是什么



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

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

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

TheGlobals.IsFullGame = true; 

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

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

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

感谢您的评论。

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

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

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

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

现在呢,

  1. 如果设备内存不足,并且您的应用程序处于后台

简单地说,安卓系统会杀死你的应用程序进程,以保持其他应用程序的运行状态,并且你会得到变量的默认值——无状态保存

  1. 如果电池电量不足和其他设备关闭的特殊情况会怎样

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

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

解决方案:

您必须保持应用程序变量的值,直到应用程序的生命周期意味着直到应用程序没有从设备上卸载为止,所以最好使用SharedPreference来存储您的变量值,这些值在您更改应用程序之前保持持久性。

检查整个程序是否被清除。因此,如果用户可以返回到游戏屏幕IsFullGametrue,或者应用程序已被其false破坏。

相关内容

  • 没有找到相关文章

最新更新