本文摘自: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应用中的关键部件。
网友评论