深入学习:单例

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

你可能感兴趣的:(深入学习:单例)