持有应用程序Context实例是不好的做法?

时间:2013-11-30 15:30:28

标签: android design-patterns android-context

根据我的理解,Android中的应用程序是一个单例(如果我错了,请纠正我),我们总是只有一个应用程序上下文实例。

因此,从这个角度来看,在Application类中保存应用程序Context是不好的做法吗? 它会导致大量内存泄漏吗?

以下是一个例子:

public class MyApp extends Application {
    private static Context appContext = null; // <-- here is the thing!

    @Override
    public void onCreate() {
        appContext = this;
    }

    public static Context getApplicationContextSingleton () {
        return MyApp.appContext;
    }
}

执行此操作的原因是全局访问的类,如PreferencesManager,大多数静态方法总是需要上下文。因此,我不是每次都传递它(甚至将它存储在一个可能很糟糕的实例中),而是考虑存储应用程序上下文。我没有看到哪些缺点?

1 个答案:

答案 0 :(得分:11)

  

在我的Application类中保存应用程序Context是不好的做法吗?

这是一种代码味道。

  

会导致大量内存泄漏吗?

拥有静态数据成员不会导致大量内存泄漏。过度使用Application对象是否会导致大量内存泄漏取决于您在何处以及如何使用它。

  

我没有看到哪些缺点?

并非所有Context都是平等的。一般来说,只有当你知道具体为什么需要Application上下文时才使用Application,而不是一切。

DoubleEncore的Dave Smith有一个awesome blog post,涵盖Context类型之间的差异以及何时使用另一个类型。