1

我的问题很简单,但内容可能很复杂。例如,我有这个类:

  • ActivityA.class
  • ActivityB.class
  • ActivityC.class
  • 单例类

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

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

    List<HeavyObject> listaObjects;
}

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

我的问题是:Android 可以在任何时候释放这个类而不释放当前的活动吗?即,我正在观看活动 B,Android 可以销毁(释放)我的类 Singleton 还是仅在发布所有应用程序时才卸载这些类?

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

4

3 回答 3

1

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

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

于 2012-12-05T21:58:01.407 回答
1

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

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

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

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

于 2012-12-05T22:24:26.487 回答
-1

如果您有耐心观看此视频,您将了解 Android 内存管理的基础知识。

我完全建议你这样做!

于 2012-12-05T21:57:00.897 回答