单例模式
用于保证一个类只有一个实例,并提供全局访问点。在安卓开发中,可以用单例来实现不同Activity之间共享数据,比如某自定义类的集合。
【懒汉式】
调用get方法时才完成实例化。
【饿汉式】
程序启动时就立即创建该单例对象。不需要考虑线程安全问题。
【破坏单例模式】
1.通过Singleton.class获取Singleton类的Class对象,然后使用getDeclaredConstructor()方法获取Singleton类的构造方法,再通过setAccessible(true)方法将构造方法的访问权限设置为可访问,最后使用newInstance()方法创建Singleton对象。
解决方法:加对象锁或者同步锁都可以。
2.当一个单例对象被序列化后,如果在反序列化过程中没有特殊处理,会通过调用类的构造方法来创建对象,那么系统会重新创建一个新的对象,从而导致原有的单例对象被破坏。单例模式的构造方法通常被私有化,从而不能直接被外部调用。因此,如果没有特殊处理,系统会使用默认的构造方法来创建一个新的对象。
如下方式可以解决。在反序列化时会返回已经创建好的单例实例,而不会再创建新的实例。