java – Android VM可以垃圾收集静态变量,而不会杀死整个Android应用程序吗?

前端之家收集整理的这篇文章主要介绍了java – Android VM可以垃圾收集静态变量,而不会杀死整个Android应用程序吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
(标题是误导的,因为垃圾收集器只收集对象,但我发现这个标题更直接)

假设我有一个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离开应用程序(或通知,来电或最近的任务列表等),然后通过最近的任务列表返回到您的应用程序.如果您的进程在不在前台的时间内被终止,则当您从最近的任务列表启动活动时,静态数据成员将为空.由于用户返回的活动可能不一定是您的启动器活动,因此您的应用程序可能表现为静态数据成员自动变为空,尽管这是因为您的进程已被终止并重新启动.

这是静态数据成员需要非常仔细使用的几个原因之一.

猜你在找的Android相关文章