Android 是否会在活动之前释放单例的内存



>我的问题很简单,但也许是一个复杂的内容。例如,我有这样的类:

  • 活动A.class
  • 活动B.class
  • 活动C.class
  • 辛格尔顿.class
单例

是一种单例类模式,例如:

public class Singleton {
    static Singleton instance = new Singleton();
    private Singleton();
    List<HeavyObject> listaObjects;
}

我在任何上下文(活动)中使用此单例。

我的问题是:Android 可以在不发布当前活动的情况下随时发布这个类吗?即,我正在观看活动 B,Android 可以销毁(释放)我的类单例还是仅在所有应用程序发布后卸载类?

或者,当活动被销毁时,因为类在活动的上下文中?

如果没有对 Singleton 的未完成引用,就像任何引用为 null 一样,垃圾回收机制将在它完成轮次后销毁它。这意味着它很可能会被销毁,但一旦所有引用都为空,它就不会立即销毁。

但是,即使一个活动正在使用单例,也不会释放它,除非该活动被销毁

我假设你的 Singleton.instance 实际上是一个静态字段(否则你的示例没有多大意义)。

在这种情况下,单一实例生存期将与应用程序进程的生存期相关联。 进程生存期在调用进程的第一个活动(或调用进程实现的服务)时开始。

在所有进程活动停止后,进程可能随时被销毁。

因此,如果您有未停止的活动,则实例将保留。 但是,如果进程中的所有活动都已停止,则可以随时销毁该进程。 如果您的 Activity 再次启动,如果进程在此期间被销毁,则必须再次创建实例。

最新更新