假设我有一个Android应用程序,一个名为“global”的类名为“userid”的静态变量(在初始化时为空).
如果我将“userid”变量设置为Android应用程序生命周期中的一些值,则说Global.userid =“myid”,当Android应用程序仍然存在时,该变量是否可能变为空值?
换句话说,Android VM是否可以卸载Global类,并且由于低内存问题而“杀死”这个全局静态变量而不会杀死整个Android应用程序?
我担心在应用程序运行时(由于内存不足问题),userid突然变空,因此崩溃了整个应用程序.
编辑
我误解了一些概念(应用程序与活动之间).感谢所有答案!
解决方法
If I set “userid” variable to some value duing Android application lifecycle,say Global.userid = “myid”,is it possible for this variable to become null while Android application is still alive?
@H_404_20@如果你把它设置为null,是的.
In other words,is it possible for Android VM to unload Global class and “kill” this global static variable due to low-memory issue without killing the whole Android application?
@H_404_20@对于正常情况,否
如果你使用自定义的类加载器玩,可以想象,有可能在哪些类被卸载的场景(因此他们上的任何静态数据成员都会发泄) – 我似乎记得有关于这种情况的讨论,但是我忘记了结论.然而,很少的应用程序应该会与自定义类加载器混淆.
I am worried about the situation that userid becomes suddenly null while application is running (due to low memory issue),therefore crashing the whole app.
@H_404_20@这不应该发生.
可能发生的情况是用户在您的应用程序中,通过HOME离开应用程序(或通知,来电或最近的任务列表等),然后通过最近的任务列表返回到您的应用程序.如果您的进程在不在前台的时间内被终止,则当您从最近的任务列表启动活动时,静态数据成员将为空.由于用户返回的活动可能不一定是您的启动器活动,因此您的应用程序可能表现为静态数据成员自动变为空,尽管这是因为您的进程已被终止并重新启动.
这是静态数据成员需要非常仔细使用的几个原因之一.