Android VM有可能在不杀死整个Android应用程序的情况下垃圾收集静态variables?

(标题是误导,因为垃圾收集器只收集对象,但我发现这个标题更直接)

假设我有一个名为“userid”的静态variables名为Global(在初始化时为null)的Android应用程序。

如果在Android应用程序生命周期中将“userid”variables设置为某个值,请说Global.userid =“myid”,这个variables在Android应用程序仍然活着的时候可能变为空吗?

换句话说,Android VM是否可以卸载Global类,并且由于内存不足而“杀死”这个全局静态variables而不杀死整个Android应用程序?

我担心的是,在应用程序运行时,由于内存不足,userid会突然变为null,从而导致整个应用程序崩溃。

编辑我误解了一些概念(在应用程序进程与活动之间)。 感谢所有的答案!

如果在Android应用程序生命周期中将“userid”variables设置为某个值,请说Global.userid =“myid”,这个variables在Android应用程序仍然活着的时候可能变为空吗?

如果你把它设置为null ,是的。

换句话说,Android VM是否可以卸载Global类,并且由于内存不足而“杀死”这个全局静态variables而不杀死整个Android应用程序?

对于正常情况,没有。

如果你玩弄自定义的类加载器,可以想象,可能会出现类卸载的情况(因此任何静态数据成员都会被嘲笑 ) – 我似乎记得有关于这种情况的讨论,但是我忘记了结论。 但是, 很less有应用程序应该使用自定义类加载器。

我担心的是,在应用程序运行时,由于内存不足,userid会突然变为null,从而导致整个应用程序崩溃。

这不应该发生。

可能发生的情况是,用户在您的应用程序中,通过HOME(或通知,来电或最近的任务列表等)离开应用程序,然后通过最近的任务列表返回到您的应用程序。 如果您的进程在不在前台的时候被终止,那么当您的活动从最近的任务列表启动时,您的静态数据成员将为null 。 由于用户返回的活动可能不一定是您的启动器活动,您的应用程序可能performance得好像静态数据成员自发地变为null ,即使这是因为您的进程已终止并重新启动。

这是静态数据成员需要非常小心使用的几个原因之一。

如果你将variables设置为static,那么你可以从应用程序中的任何地方访问它,而不必每次创build类的新实例,我相信这是一个很好的Singleton模式候选者。

 String userid = Global.getInstance().userid;