android singleton vs静态方法

时间:2011-07-13 06:40:19

标签: java android design-patterns

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

几乎每个Activity都需要加载和getter方法。

我打算让这些方法保持静态,但是一些博客不喜欢它。

这两种方法的主要优点和缺点如下:

优点:保持多态性的能力。

缺点:必须在每个Activity中调用getInstantace方法。

静态方法反之亦然。

请指导我选择两种方法或任何其他方法。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:9)

我会避免在Android中使用静态变量,因为如果您的应用暂停并且手机资源不足,Android会经常清除您班级中的所有静态数据,从而导致意外的空指针异常。在Google上搜索“Android Static Null”以获得更好的解释。

无论哪种方式(静态方法或单身人士),您都应该确保您的应用能够保存状态并在Android清除静态变量时将其恢复。

答案 1 :(得分:7)

你可以找到一些非常不喜欢任何东西的“博客”。静态方法没有任何问题,只要它们操作的任何状态都是方法本地/每次调用传入(同一警告适用于单例上的实例方法)。

任何一种方法都应该没问题,只需选择你喜欢的方法。作为一般经验法则,如果您的单例实例不会保留在运行时可能具有可变性的任何状态,请使用静态方法。否则,如果单例意味着保持状态而不仅仅是作为少数实用方法的存储库,那么将其设为单例。

对于使用我遇到的静态方法的唯一合理的论点是,静态方法对于单元测试目的的模拟是有问题的。但我的猜测是你可能没有进行模拟单元测试,而且我认为使用模拟对象进行测试的价值通常被夸大了,当你看到它出来的值相对于设置的工作量时测试案例。

答案 2 :(得分:2)

正确的方法是使用依赖注入。有一个问题here可以讨论您的替代方案。

对我来说,单例和静态方法实际上是一回事。您的类和单例之间仍然存在紧密耦合,单例实现无论如何都使用静态成员。我会说选择最适合你风格的东西。

答案 3 :(得分:1)

我更喜欢使用单身人士。 应用程序启动时总是存在静态的缺点,即使您没有使用此对象,也会从系统中消耗一些内存。