单机与Android中的应用程序上下文

问题:

回想这个post enumerating several problems of using singletons
并且看到使用单例模式的Android应用程序的几个例子,我想知道是否使用Singletons而不是通过全局应用程序状态共享的单个实例(子类化android.os.Application并通过context.getApplication()获取它)是个好主意。
这两种机制有什么优点/缺点?
说实话,我希望在这篇文章Singleton pattern with Web application, Not a good idea!中提供相同的答案,但适用于Android。我对么?否则DalvikVM有什么不同?
编辑:我想对涉及的几个方面提出意见:

  • 同步
  • 可重用性
  • 测试

回答:

我非常不同意Dianne Hackborn的回应。我们从我们的项目中逐一删除所有单身人士,赞成轻量级的任务作用域对象,这些对象在实际需要时可以轻松重新创建。
单身人士是测试的噩梦,如果懒惰初始化,将引入“状态不确定性”,具有微妙的副作用(当将调用getInstance()从一个范围移动到另一个范围时,可能会突然出现)。可见性被提及为另一个问题,由于单例意味着“全局”(=随机)访问共享状态,当并发应用程序中未正确同步时,可能会出现微妙的错误。
我认为它是一种反模式,它是一种不好的面向对象的风格,基本上等于维持全球的状态。
回来你的问题:
虽然应用程序环境本身可以被认为是单例,但是它是框架管理的,并且具有明确的生命周期,范围和访问路径。因此,我相信,如果你需要管理应用程序的全球状态,它应该在这里,而不在其他地方。对于其他任何事情,如果really需要一个单例对象,或者如果还可以重写单例类来实例化执行手头任务的小型,短命的对象,那么请重新思考。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Singletons vs. Application Context in Android?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

34 − 30 =