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?

如果你把它设置为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?

对于正常情况,否

如果你使用自定义的类加载器玩,可以想象,有可能在哪些类被卸载的场景(因此他们上的任何静态数据成员都会发泄) – 我似乎记得有关于这种情况的讨论,但是我忘记了结论.然而,很少的应用程序应该会与自定义类加载器混淆.

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.

这不应该发生.

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

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...