public静态变量在Android中的生命周期是多少?
What is the life cycle of a public static variable in Android?
我有一个简单的 class 来保留一些变量以在游戏中的活动之间共享它们,例如:
public class TheGlobals {
public static boolean IsFullGame = false;
}
现在,当游戏启动时,初始 activity 是 MainMenu,它确定用户是否已购买完整游戏,并相应地设置变量。例如,如果用户购买了游戏,它会
TheGlobals.IsFullGame = true;
到目前为止一切顺利。从这里,用户单击“播放”并切换到游戏 activity,其中主要游戏动作发生。在第二个(游戏)activity 中,有几个地方我通过访问该全局静态变量来检查它是否是完整/购买的游戏,并相应地启用或禁用某些功能。
现在,用户在玩游戏时会在某个时候点击主页按钮或切换到其他应用。一段时间后,用户回到我的游戏,从最近的应用程序启动它,这会在他们离开的地方打开游戏,即直接在第二个 (Game) activity 中,用户愉快地继续玩。
我假设此时我的全局静态变量的值可以是 True 或 False 是否正确,这取决于进程是否被破坏,或者是否可以保证 Android 将恢复它的价值。我在想,如果进程保持活动状态,那么该值将保持为 True(因为它在第一个 activity 中设置)并且只要进程保持活动状态就会保留;或者如果进程被销毁,用户稍后返回,并在第二个(游戏)activity 中直接打开我的游戏,那么在这种情况下全局静态变量的值将默认为 False(就像它在 class 级别上定义,并且没有机会在第一个 activity).
中设置
感谢您提出任何意见。
Afaik 整个程序是否已清除。所以如果用户可以return到游戏画面IsFullGame
就是true
,或者app已经被销毁了false
.
Am I correct to assume that at this point, the value of my global
static variable can be either True or False, depending whether the
process was destroyed or not, or is there any guarantee that Android
will restore its value. I am thinking that if the process was kept
alive, then the value will remain True (as it was set in the first
activity) and got preserved as long as the process was kept alive; or
if the process was destroyed, and the user comes back to it later, and
opens my game directly in the second (Game) activity, then the global
static variable's value in that case would default to False (just like
it's defined on the class level, and without a chance of being set in
the first activity).
是的,你是对的。此时进程为Android申请进程。
仍然是您的应用程序进程 运行 它对您的变量 TheGlobals.IsFullGame
.
具有持久值
Now, the user plays and at some point hits the Home button or switches
to other apps. After some time, the user comes back to my game,
launching it from the recent apps, which opens the game where they
left off, that is directly in the second (Game) activity, and the user
happily continues playing.
因为你的应用程序在后台任务中可用意味着应用程序进程是 运行 所以你得到正确的值。
现在呢,
- 如果设备出现内存不足问题并且您的应用程序在后台运行
只需 Android 系统终止您的应用程序进程以保持其他应用程序 运行 状态,并且您将获得变量的默认值,不保留任何状态
- 如果电池电量不足和设备关闭的其他异常情况怎么办
只是在启动设备时,用户必须从头开始启动您的应用程序,并且您的变量没有持久状态,它只有默认值。
所以在这种情况下,您的应用程序会保留变量值,直到您的应用程序 运行 并且它已在系统上分配内存 space(应用程序 运行 space 在设备 RAM 上)
解法:
您必须保留应用程序变量的值,直到应用程序的生命周期意味着直到应用程序未从设备上卸载,所以最好使用 SharedPreference 来存储您的变量值,该值将保持持久性,直到您通过更改应用程序。
我有一个简单的 class 来保留一些变量以在游戏中的活动之间共享它们,例如:
public class TheGlobals {
public static boolean IsFullGame = false;
}
现在,当游戏启动时,初始 activity 是 MainMenu,它确定用户是否已购买完整游戏,并相应地设置变量。例如,如果用户购买了游戏,它会
TheGlobals.IsFullGame = true;
到目前为止一切顺利。从这里,用户单击“播放”并切换到游戏 activity,其中主要游戏动作发生。在第二个(游戏)activity 中,有几个地方我通过访问该全局静态变量来检查它是否是完整/购买的游戏,并相应地启用或禁用某些功能。
现在,用户在玩游戏时会在某个时候点击主页按钮或切换到其他应用。一段时间后,用户回到我的游戏,从最近的应用程序启动它,这会在他们离开的地方打开游戏,即直接在第二个 (Game) activity 中,用户愉快地继续玩。
我假设此时我的全局静态变量的值可以是 True 或 False 是否正确,这取决于进程是否被破坏,或者是否可以保证 Android 将恢复它的价值。我在想,如果进程保持活动状态,那么该值将保持为 True(因为它在第一个 activity 中设置)并且只要进程保持活动状态就会保留;或者如果进程被销毁,用户稍后返回,并在第二个(游戏)activity 中直接打开我的游戏,那么在这种情况下全局静态变量的值将默认为 False(就像它在 class 级别上定义,并且没有机会在第一个 activity).
中设置感谢您提出任何意见。
Afaik 整个程序是否已清除。所以如果用户可以return到游戏画面IsFullGame
就是true
,或者app已经被销毁了false
.
Am I correct to assume that at this point, the value of my global static variable can be either True or False, depending whether the process was destroyed or not, or is there any guarantee that Android will restore its value. I am thinking that if the process was kept alive, then the value will remain True (as it was set in the first activity) and got preserved as long as the process was kept alive; or if the process was destroyed, and the user comes back to it later, and opens my game directly in the second (Game) activity, then the global static variable's value in that case would default to False (just like it's defined on the class level, and without a chance of being set in the first activity).
是的,你是对的。此时进程为Android申请进程。
仍然是您的应用程序进程 运行 它对您的变量 TheGlobals.IsFullGame
.
Now, the user plays and at some point hits the Home button or switches to other apps. After some time, the user comes back to my game, launching it from the recent apps, which opens the game where they left off, that is directly in the second (Game) activity, and the user happily continues playing.
因为你的应用程序在后台任务中可用意味着应用程序进程是 运行 所以你得到正确的值。
现在呢,
- 如果设备出现内存不足问题并且您的应用程序在后台运行
只需 Android 系统终止您的应用程序进程以保持其他应用程序 运行 状态,并且您将获得变量的默认值,不保留任何状态
- 如果电池电量不足和设备关闭的其他异常情况怎么办
只是在启动设备时,用户必须从头开始启动您的应用程序,并且您的变量没有持久状态,它只有默认值。
所以在这种情况下,您的应用程序会保留变量值,直到您的应用程序 运行 并且它已在系统上分配内存 space(应用程序 运行 space 在设备 RAM 上)
解法:
您必须保留应用程序变量的值,直到应用程序的生命周期意味着直到应用程序未从设备上卸载,所以最好使用 SharedPreference 来存储您的变量值,该值将保持持久性,直到您通过更改应用程序。