Android单例vs静态方法



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

load和getter方法几乎在每个Activity中都是必需的。

我本来打算把这些方法变成静态的,但是有些博主不喜欢。

我认为这两种方法的主要优点和缺点如下。

单例

优点:能够保持多态性。

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

静态方法反之。

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

我会避免在Android中使用静态变量,因为如果你的应用暂停并且手机资源不足,Android通常会从你的类中清除所有静态数据,导致意外的空指针异常。在谷歌上搜索"Android Static Null"会得到更好的解释。

无论哪种方法(静态方法或单例),你都应该确保你的应用程序有保存状态和恢复状态的能力,以防Android清除你的静态变量

你可以找到"一些博主",他们几乎不喜欢任何东西。静态方法没有任何问题,只要它们操作的任何状态都是方法的局部状态/在每次调用时传递进来(同样的警告适用于单例实例方法)。

两种方法都可以,只要选择你喜欢的一种。作为一般的经验法则,如果您的单例实例在运行时不会持有任何可能可变的状态,则使用静态方法。否则,如果单例是为了保存状态,而不仅仅是作为少数实用程序方法的存储库,那么就把它设为单例。

我所遇到的反对使用静态方法的唯一不太合理的理由是,静态方法对于单元测试目的的模拟是有问题的。但是我的猜测是,您可能没有进行模拟单元测试,并且我认为,当您查看与设置测试用例的工作量相关的价值时,使用模拟对象进行测试的价值通常被夸大了。

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

对我来说,单例方法和静态方法实际上是一回事。类和单例之间仍然存在紧密耦合,而单例实现使用静态成员。

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

最新更新