Android Singleton 单例模式应用01

目的:确保一个类别只会产生一个物件

废话不多说马上来看Singleton怎么实作

这个写法在Android Memory Leak及衍伸问题01有提到
我打算把每个问题都拆开来讨论并且个别讨论解决方案
避免在一篇文章中提到多个问题而导致读者混淆解决方案

实作完了马上就来应用一下比较一下差异

一般状况
首先在一般没有使用Singleton的情况,我们任何一个地方使用到物件都必须new一个新的
在这个範例中我们在一个Activity呼叫了3个API,在没有Singleton的状态下,就产生了3个不同的物件
http://img2.58codes.com/2024/20126774db0NxUBCIp.png

使用Singleton
接下来我们导入Singleton Pattern在同样的情境下使用,所有地方都是使用同一个物件。在这个範例中我们物件佔用的记忆体空间就是原本的三分之一了
http://img2.58codes.com/2024/20126774IbPxRVsvQU.png

一开始讲到的目的(确保一个类别只会产生一个物件),可能会有个疑问,只产生一个这件事有这么重要吗?
我自己认为,平常很小规模的开发或者记忆体很充足的情况,或许你做不做都感觉不到差异,就如我们刚刚举的一个例子规模很小,初始化一次根本佔用不了多少时间,当然做不做从一般的使用或者测试下,是没有办法察觉的

举的例子讨论一下

我们假设这个物件在初始化的时候需要很高的成本
这边我在初始化的时候动作加上需要读取一张3MB的图片资源档
http://img2.58codes.com/2024/2012677453NyT6txqm.png

一般状况
可以看到在两次初始化之间可用记忆体直接少3%了
至于我是怎么Log记忆体的可以去爬爬文,我是看这个StackOverFlow
http://img2.58codes.com/2024/20126774r6j0MLVhjf.png

使用Singleton
在这边两次初始化之间记忆体几乎没有变动,主要原因就是用Singleton Pattern后,sInstance物件还在,所以根本不需要再重新new一个新物件,当然就不会有多的记忆体被佔用
http://img2.58codes.com/2024/20126774sOSlzSn4NW.png

看完这篇其实也是一个结论,从平常就开始养成良好的撰写习惯,避免Project越养越肥,到时候重构、优化效能做到痛哭流涕

Android Singleton 单例模式应用02(Multi-Thread、Synchronize)


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章