Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 保存应用程序上下文实例是一种不好的做法吗?_Android_Design Patterns_Android Context - Fatal编程技术网

Android 保存应用程序上下文实例是一种不好的做法吗?

Android 保存应用程序上下文实例是一种不好的做法吗?,android,design-patterns,android-context,Android,Design Patterns,Android Context,据我所知,Android中的应用程序是一个单例(如果我错了,请纠正我),我们总是只有一个应用程序上下文实例 因此,从这个角度来看,在我的应用程序类中保存应用程序上下文是一种不好的做法吗? 它会导致大规模内存泄漏吗 以下是一个例子: public class MyApp extends Application { private static Context appContext = null; // <-- here is the thing! @Override

据我所知,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;
    }
}
公共类MyApp扩展应用程序{
私有静态上下文appContext=null;//
在我的应用程序类中保存应用程序上下文是一种不好的做法吗

这是一种代码气味

它会导致大规模内存泄漏吗

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

我没有看到的缺点是什么

并非所有的
上下文都是平等创建的。一般来说,只有当您知道具体为什么需要
应用程序
上下文时,才使用
应用程序
,而不是所有内容


DoubleEncore的戴夫·史密斯(Dave Smith)有一篇文章介绍了
上下文类型之间的差异,以及何时使用它们。

你所说的“代码气味”是什么意思?闻起来像是坏习惯?@Bolhoso:"在计算机编程中,代码气味是程序源代码中可能表明深层次问题的任何症状。代码气味通常不是bug,它们在技术上并不错误,目前也不会阻止程序运行。相反,它们表明设计中的弱点,可能会减慢开发或增加开发速度他说:“这总是非常糟糕的,而且是“猪”式的方法。永远不要这样做。@Geralt我理解你的观点。尽管文章说”现在不管我们的上下文来自哪里,因为我们持有的引用是安全的。应用程序上下文本身就是一个单例,所以我们不会通过创建另一个对它的静态引用来泄漏任何内容。,在我的情况下,创建一个Singleton Preferences Manager会更安全,因为我在getInstance中接收到一个上下文,在那里我可以保存对应用程序上下文的引用。对吗?@IgorGanapolsky:您绝对不需要“将视图作为全局静态变量传递”。