作为一个Java菜鸟,断断续续地学了几个月的Java,然后接触了Android开发,很多东西依旧似懂非懂,由于要学的东西实在太多,感觉自己像是盲人摸象,很多东西也不得其法,为了加深自己的理解,就把学到的一些知识点进行总结整理。
可能很多地方总结的不到位,若是有不对的地方,还烦请看到该篇文章的不吝赐教。。
第一篇就整理一下单例设计模式相关知识点。
单例模式作用:确保程序中一个类最多只有一个实例,提供访问这个实例的全局点,如果将一个对象赋值给全局变量,那么在程序一开始的时候就创建好对象,比较耗资源,单例设计模式就能够在需要的时候才创建。
结构大体包括:
1.一个私有的静态类型引用,因为静态可以保证只有一个变量引用
2.一个私有化的构造方法,保证外部无法创建类实例
3.一个静态方法用来获取对象。
懒汉模式在多线程中可能会出现一些问题:
解决办法:
把getInstance()方法变成synchronized同步方法,进入该方法之前要等别的线程离开次方法。
但只有第一次执行此方法时,才需要同步,换句话说一旦设置好instance变量,就不会再需要同步这个方法了,之后每次调用都需要同步,反而造成性能下降,不能应用于频繁调用getInstance()的地方
扩展:
在Android的学习中,常常要考虑到内存泄露的问题,在单例设计模式中就有可能出现这种问题
context的生命周期至关重要
1.如果此时传入的是Application的context,因为Application的生命周期就是整个应用的生命周期,所以没什么问题
2.如果此时传入的是Activity的context,但这个context对应的的activity退出时,由于该context的引用被 单例对象所持有,其生命周期整个应用的生命周期。所以当前activity退出时,它的内存并不会被回收,所以造成了泄露
学习资料参见:
《headfirst 设计模式》
Android 内存泄漏总结