在Android中使用上下文的单例

时间:2013-05-18 15:52:57

标签: java android singleton

我想创建一个可以从我的应用程序中的所有点调用的Singleton类。问题是这个类需要一个操作的上下文。

我不想在每个活动中重新创建单例,因为这样就失去了所有意义,所以我考虑在我的MainActivity中创建它,使用init方法将上下文作为参数传递。从那时起,我的Singleton将是可用的,但我认为这是糟糕的设计,因为这样我的MainActivity引用将始终保持,因此我可能会遇到内存泄漏。

我在这儿吗?

2 个答案:

答案 0 :(得分:12)

由于内存泄漏,您不能将主要活动上下文保存到单例中。如果您需要在单例内部使用常量上下文,请使用getApplicationContext()。这可以安全地保存。请注意,此上下文不适用于大多数与gui相关的功能。在极少数情况下,您需要在单例内部使用活动级别上下文,将调用活动上下文传递给单例的方法而不保存

答案 1 :(得分:0)

试试WeakReference<Context>

private WeakReference<Context> context;

public static synchronized OsControler getInstance(Context context, int numero) {
    if (mInstance == null) {
        mInstance = new OsControler(context, numero);
    }

    return mInstance;
}

private OsControler(Context context, int numero) {
    this.context = new WeakReference<>(context);
    NUMERO = numero;
}