Android会在活动之前为Singleton释放内存吗?

时间:2012-12-05 21:53:13

标签: android memory-management jvm singleton

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

  • ActivityA.class
  • ActivityB.class
  • ActivityC.class
  • Singleton.class

Singleton是一个单例类模式,例如:

public class Singleton {
    static Singleton instance = new Singleton();
    private Singleton();

    List<HeavyObject> listaObjects;
}

我在任何上下文中使用此Singleton(Activity)。

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

或者也许当一个Activity被销毁时,因为这些类是在Activities的上下文中?

3 个答案:

答案 0 :(得分:2)

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

但是,即使一个Activity使用Singleton,也不会释放它,除非该Activity被销毁

答案 1 :(得分:1)

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

在这种情况下,您的Singleton生命周期将与应用程序进程的生命周期相关联。当调用进程的第一个Activity(或对进程实现的服务进行调用)时,进程生存期开始。

在所有进程停止后,可以随时销毁该进程。

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

答案 2 :(得分:-1)

如果您有耐心观看此video,您将获得Android内存管理的基础知识。

我完全建议你这样做!