android - 持有应用程序上下文实例是一种不好的做法吗?

标签 android design-patterns android-context

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

那么,从这个角度来看,将应用程序上下文保存在我的应用程序类中是一种不好的做法吗? 它会导致大量内存泄漏吗?

这是一个例子:

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,大多数具有静态方法,总是需要一个上下文。因此,我没有考虑每次都传递它(或者甚至将它存储在一个实例中,这可能很糟糕),而是考虑存储应用程序上下文。我没有看到的缺点是什么?

最佳答案

is it a bad practice to save the application Context in my Application class?

这是一种代码味道。

Can it lead to a massive memory leak?

拥有静态数据成员不会导致大量内存泄漏。过度使用 Application 对象是否会导致大量内存泄漏取决于您使用它的位置和方式。

What are the drawbacks I'm not seeing?

并非所有的 Context 都是一样的。一般来说,只有当您知道具体为什么需要Application上下文时才使用Application,而不是用于所有情况。

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

关于android - 持有应用程序上下文实例是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20301989/

相关文章:

java - Android 应用程序上的多个传感器

java - 将 Logcat 保存到 Android 设备中的文本文件

android - 类型 'System.ComponentModel.INotifyPropertyChanged' 在未引用的程序集中定义

android - 如何在调用 attachBaseContext 之前获取 sharedPreferences 键值?

android - fragment 中的 getContext()

安卓棉花糖 : Test permissions with Espresso?

java - `final` 上的 `class Singleton` 和 `private` 上的 `Singleton()` 是否彼此冗余?

design-patterns - 异步观察者模式

iphone - 如何将数据从 UITableViewCell 子类传递到 iOS 中的 RootViewController?

android - 什么时候调用Application类的getApplicationContext()?