本文摘自: Android 编程权威指南
Android 开发实践中, 经常会用到 CrimeLab 中使用过的单例模式然而, 单例使用不当的话,
会导致应用难以维护, 因此它也常 人
Android 开发常用到单例的一大原因是, 它们比 fragment 或 activity 活得 例如, 在设备旋转
或是在 fragment 和 activity 间跳转的场景下, 单例不会受到影响, 而旧的 fragment 或 activity 已经不
复存在了
单例能方便地存储控制模型层对象假设有个比 CriminalIntent 更为复杂的 CriminalIntent 应
用, 它的许多个 activity 和 fragment 会修改 crime 数据某个控制单元修改了 crime 数据之后, 么保
证发 给其他控制单元的是最新数据呢? 如果 CrimeLab 掌控数据对象, 所有的修改都由它来处
理, 是不是数据的一致性控制就容易多了? 而且, 在控制单元间 转时, 我们还可以给每个 crime 添加 ID 标识, 让控制单元使用 ID 标识从 CrimeLab 获取完整的 crime 数据
再来 单例的缺点举个例子, 虽然单例能存储数据, 活得比控制单元 , 但这并不代
表它能 存在我们切换至其他应用, 又 Android 回收内存时, 单例 同那些实例变量也就不
复存在了结论很明显: 单例无法做到持 存储 (将文件写入 盘或是发 到 web 服务器是不
错的数据持 化存储方案)
单例还不利于单元 例如, 如果应用代码直接调用 CrimeLab 对象的 态方法, 时以
模 版本的 CrimeLab 代替实际 CrimeLab 实例就不 现实实践中, Android 开发人员会使用工具解决这个问题这个工具允许以单例模式使用对象, 对象也可以按需替换
单例使用很方便, 因而很容易被滥用在想用就用, 想存就存之前, 你能深思熟虑: 数
据 竟用在哪里? 用在哪里能真正解决问题?
假如不 重对待这个问题, 很可能后来人在查看你的单例代码时, 就 打开了一个满是 糟
糟 的 : 旧照片, 等等它们有什么存在的意义? 再强调一次: 请确保
有充足的理由使用单例模式存储你的共享数据!
使用得当, 单例就是拥有优 架构的 Android 应用中的关键部件
来源: http://www.jianshu.com/p/8a657c6f210b