Android中静态变量的生命周期

may*_*ysi 35 java static android

当我在主活动中声明并初始化变量为静态并且活动被销毁时.我还可以访问变量的内容吗?

例如,要始终访问我存储到此变量的AsyncTask?我想要的是能够在方向改变后访问它.

Tar*_*ney 19

静态变量与类相关联,只要类在内存中,它们就会存在,并在类被卸载时消失(很少发生).

在Android中,您已经看到当我们关闭任何应用程序时它并没有完全关闭,它仍然保留在最近的应用程序堆栈中,您可以通过按住主页按钮(大多数设备上)来查看.

当其他应用程序需要内存时,Android本身会踢出最近的应用程序

  • 证明,链接?为什么在应用程序继续运行时无法从内存中卸载该类及其类加载器? (2认同)

JNL*_*JNL 7

如果该进程被终止,则所有静态变量将重新初始化为其默认值。

这主要是因为,当您重新启动应用程序时,创建一个新实例,并且静态变量将被重新初始化。


小智 5

静态变量与类本身相关联。只要类在内存中,变量就会被保留。

类很少被垃圾收集,因为它们存在于所谓的Permanent Generation内存空间中(您可以在此处找到有关分代 GC 如何工作的更多信息https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index .html)。

您可以查看https://developer.android.com/topic/performance/memory-overview以更好地了解 Android 中的内存管理方式,但除非您的应用正在执行非常不寻常的操作,否则会分配永久代它需要保存所有类的所有内存,并且不会被垃圾收集。

方向更改不会清除静态变量,但是如果这是您的目标,则使用静态变量不是很合适。您可以通过使用setRetainInstance或类似方法在方向更改时保持实例状态(请参阅Android:如何防止在方向更改时清除类变量以获得答案)