在我看来,如果您在android中有一些状态或数据要从其他活动访问(但不想持久),则需要一个单例。这是正确的还是还有其他设计应用程序的方法?
我不是单身人士有问题。我只是在想,因为这与普通的桌面应用程序开发有根本的不同。
答案 0 :(得分:1)
您所说的肯定不正确,还有其他方法可以设计Android应用。
实际上,对于Android开发,应该避免或谨慎使用Singleton,并且不应作为第一个或唯一的解决方案。特别不要使用它在活动之间粗心地共享数据或状态。
如果您发现自己的应用要求所有内容都使用Singleton,那么很有可能...您需要为应用进行重新设计。
使用Singletons时,实际上要牢记以下几点:
它们通常存在于应用程序的整个生命周期中,直到系统关闭您的应用程序将它们关闭为止
单例创建不当很容易泄漏内存
设计不当的Singleton和过度使用Singleton会耗尽大量不必要的内存
很难用于测试
总的来说,在使用Singleton时,您确实需要考虑是否足够有必要将应用程序的那一部分变成Singleton。
在大多数情况下,答案是否定的。在您提到的情况下,例如在“活动”之间访问状态或数据,是“是”和“否”。
是的,因为需要访问数据可能会保证使用Singleton。否,因为不需要访问应用程序的状态。
您对“状态”一词的使用尚不清楚,但是活动应该真正进行自我管理,因为一个活动的状态不应干扰另一个活动的状态。如果是这样,则有更好的方法将该信息发送到活动(例如,使用Intent Extras ),而不是创建一个对所有内容都可以访问且存在时间比应有的时间更长的Singleton。
确实没有什么理由可以保证需要Singleton。
根据我的经验,只有两个原因可以允许使用Singleton:
例如,SQLite数据库通常用作Singleton,因为数据库的单个同步实例可以帮助防止多个Activity或Service读取/写入数据库。这有助于防止诸如一个对象写入新数据,而另一个对象在写入新数据之前读取旧数据的情况。或者两个对象同时将不同数据写入同一字段的简单情况。
此外,应用程序还经常访问SQLite数据库,因此不断打开数据库,获取一些数据,关闭数据库,打开数据库,编写一些数据,关闭数据库并没有太大意义,并重复。
我已经看到开发人员在很多情况下都使用Singletons,其中大多数都是出于非常糟糕的原因。
善良:
坏人:
我看到了更多的坏故事,但现在我不记得了。
此外,请记住,即使我说过将Database之类的东西用作Singleton也是一个好主意,但我只是说它有必要保证使用Singleton。数据库不必是单例的,还有其他解决方案可以更好地适合您的应用程序。
因此,请始终考虑是否需要使用Singleton。
在您的情况下,您需要其他活动访问的状态/数据是否确实需要在应用程序运行期间保持活动状态,并且可以通过以下解决方案来解决:SharedPreferences,Intent Extras,Callback Interfaces,数据库,静态类/字段/方法等
如果您已经对应用程序进行了深思熟虑,并且确实认为Singleton将使您的应用程序受益最大,请使用它。不要忘记使用Application Context而不是Activity的Context,因为Singleton肯定会超出Activity的寿命,并且您不希望出现内存泄漏问题。