我需要加载一些文件并将它们存储在一个静态变量中。
load和getter方法几乎在每个Activity中都是必需的。
我本来打算把这些方法变成静态的,但是有些博主不喜欢。
我认为这两种方法的主要优点和缺点如下。
单例
优点:能够保持多态性。
缺点:必须在每个Activity中调用getinstance方法。
静态方法反之。
请指导我在这两种方法或任何其他方法之间进行选择。
我会避免在Android中使用静态变量,因为如果你的应用暂停并且手机资源不足,Android通常会从你的类中清除所有静态数据,导致意外的空指针异常。在谷歌上搜索"Android Static Null"会得到更好的解释。
无论哪种方法(静态方法或单例),你都应该确保你的应用程序有保存状态和恢复状态的能力,以防Android清除你的静态变量
你可以找到"一些博主",他们几乎不喜欢任何东西。静态方法没有任何问题,只要它们操作的任何状态都是方法的局部状态/在每次调用时传递进来(同样的警告适用于单例实例方法)。
两种方法都可以,只要选择你喜欢的一种。作为一般的经验法则,如果您的单例实例在运行时不会持有任何可能可变的状态,则使用静态方法。否则,如果单例是为了保存状态,而不仅仅是作为少数实用程序方法的存储库,那么就把它设为单例。
我所遇到的反对使用静态方法的唯一不太合理的理由是,静态方法对于单元测试目的的模拟是有问题的。但是我的猜测是,您可能没有进行模拟单元测试,并且我认为,当您查看与设置测试用例的工作量相关的价值时,使用模拟对象进行测试的价值通常被夸大了。
正确的方法是使用依赖注入。这里有一个问题,讨论你的选择。
对我来说,单例方法和静态方法实际上是一回事。类和单例之间仍然存在紧密耦合,而单例实现使用静态成员。
我更喜欢使用单例。静态的缺点是它总是在应用程序启动时存在,即使你不使用这个对象,它也会占用系统的一些内存。