Java android单例与静态方法

Java android单例与静态方法,java,android,design-patterns,Java,Android,Design Patterns,我需要加载一些文件并将它们存储在静态变量中 几乎每个活动都需要load和getter方法 我本来打算让这些方法保持静态,但有些博主不喜欢 对我来说,这两种方法的主要优点和缺点如下 单身人士 优点:能够保持多态性 缺点:必须在每个活动中调用getInstantace方法 静态方法反之亦然 请指导我在两种或任何其他方法之间进行选择 任何帮助都将不胜感激。你可以找到“某个博客作者”,他几乎不喜欢任何东西。静态方法没有什么错,只要它们操作的任何状态都是本地的/随每次调用传入(同样的警告适用于单例上的实例

我需要加载一些文件并将它们存储在静态变量中

几乎每个活动都需要load和getter方法

我本来打算让这些方法保持静态,但有些博主不喜欢

对我来说,这两种方法的主要优点和缺点如下

单身人士

优点:能够保持多态性

缺点:必须在每个活动中调用getInstantace方法

静态方法反之亦然

请指导我在两种或任何其他方法之间进行选择

任何帮助都将不胜感激。

你可以找到“某个博客作者”,他几乎不喜欢任何东西。静态方法没有什么错,只要它们操作的任何状态都是本地的/随每次调用传入(同样的警告适用于单例上的实例方法)

无论哪种方法都可以,只需选择您喜欢的方法即可。一般的经验法则是,如果您的单例实例在运行时不持有任何可能可变的状态,请使用静态方法。否则,如果singleton是用来保存状态的,而不仅仅是作为少数实用程序方法的存储库,那么就将其设置为singleton

我遇到的唯一一个反对使用静态方法的半途而废的合理理由是,为了单元测试的目的,静态方法很难模拟出来。但我的猜测是,您可能没有进行模拟单元测试,而且我认为,当您查看模拟对象的测试值相对于设置测试用例的工作量时,使用模拟对象进行测试的价值通常被夸大了。

我更喜欢使用单例。
静态的一个缺点是,当应用程序启动时,它总是存在的,即使您没有使用此对象,它也会占用系统的一些内存。

正确的方法是使用依赖项注入。有一个问题讨论了你的选择


对我来说,单例方法和静态方法实际上是一样的。您的类和singleton之间仍然存在紧密耦合,singleton实现无论如何都使用静态成员。我会说选择最适合你的风格的。我会避免在Android中使用静态变量,因为如果你的应用程序暂停,手机资源短缺,Android通常会清除你类中的所有静态数据,导致意外的空指针异常。在谷歌上搜索“安卓静态空”以获得更好的解释


无论采用哪种方式(静态方法还是单例),你都应该确保你的应用程序能够保存状态并在Android清除你的静态变量时恢复状态。

你确定它在应用程序启动时存在,而不仅仅是在第一次使用类时存在吗?这没有意义。他正在将一个文件加载到静态变量中。只要文件没有加载,它就不会占用内存…@Thomas:我不确定,加载类时将初始化AFAIK静态变量。但我不确定加载类的时间,这取决于Dalvik VM的操作?类是在第一次访问时加载的,而不是在应用程序启动时加载的。这个答案,android静态为空,让我很开心。你很想找到一个隐藏的大脑升级。