回顾这post enumerating several problems of using singletons年
这两种机制有什么优点/缺点?
老实说,我希望在这篇Singleton pattern with Web application, Not a good idea!篇博文中给出同样的答案,但适用于Android.我说得对吗?DalvikVM有什么不同?
编者按:我想就涉及的几个方面发表意见:
- 同步化
- 可重用性
- 测试
回顾这post enumerating several problems of using singletons年
这两种机制有什么优点/缺点?
老实说,我希望在这篇Singleton pattern with Web application, Not a good idea!篇博文中给出同样的答案,但适用于Android.我说得对吗?DalvikVM有什么不同?
编者按:我想就涉及的几个方面发表意见:
我非常不同意黛安娜·哈克伯恩的回答.我们正在一点一点地从我们的项目中删除所有单例,以支持轻量级、任务范围的对象,这些对象可以在您实际需要时轻松地重新创建.
对于测试来说,单例是一场噩梦,如果懒散地初始化,将引入"state indeterminism",并产生微妙的副作用(当将调用从一个作用域移动到另一个作用域时,可能会突然出现这种副作用).可见性被提到是另一个问题,由于单例意味着对共享状态的访问,当在并发应用程序中没有正确同步时,可能会出现细微的错误.
我认为它是一种反模式,它是一种糟糕的面向对象风格,本质上是维护全局状态.
回到你的问题:
尽管应用程序上下文本身可以被认为是单例的,但它是由框架管理的,并且具有定义良好的life-cycle、范围和访问路径.因此,我认为如果您确实需要管理app-global状态,它应该放在这里,而不是其他地方.对于其他任何事情,请重新考虑您的really是否需要一个Singleton对象,或者是否也可以重写Singleton类来实例化执行手头任务的短暂的小对象.