单例如果考虑性能问题, 一般会选择懒汉式延迟加载

这里记录一下线程安全的单例写法

  1. 写法一: DCL
public class MySingleton {private static volatile MySingleton sInstance; // 防止指令乱序private MySingleton() {}public static MySingleton getInstance() {if (sInstance == null) { // 锁外校验, 削弱加锁导致的性能问题synchronized (MySingleton.class) {if (sInstance == null) { // 锁中校验, 确保只产生一个对象sInstance = new MySingleton();}}}return sInstance;}}
  1. 写法二: Holder
public class MySingleton {    private MySingleton() {}    private static class SingletonHolder { // 静态类"主动使用"时才加载, 不同于饿汉式        private static final MySingleton INSTANCE = new MySingleton();// 相当于加锁双重验证 = final保证初始化完成 , static保证单例;    }    public static MySingleton getInstance() {        return SingletonHolder.INSTANCE;    }}

不论是哪种单例模式,其实例始终同Application共存亡,务必需注意其内部持有的监听或回调(addXxx,registXxx)造成的内存泄露

  • 采用软/弱引用避免这种泄露
  • 在合适的时机清除监听(如onDestroy)

更多相关文章

  1. Android(安卓)webView自适应屏幕
  2. Android(安卓)9.0 Launcher启动详解
  3. 解决 pinyin4j 在Android(安卓)某些编译环境下不能用
  4. Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布
  5. Android三种基本的加载网络图片方式
  6. android listview使用glide异步加载图片错位,闪烁问题
  7. Android打开pdf,docx,doc,.xls,xlsx,结尾的文件
  8. Android(安卓)Service小记
  9. android:webview实现简单的浏览器

随机推荐

  1. 用Android自带的signapk.jar + .x509.pem
  2. Android 图片平铺效果bitmap
  3. Android webview listview 判断到底
  4. android 开发 checkBox的显示和隐藏
  5. Android NDK使用常见错误
  6. Android初学者的一些学习网址
  7. Android中NFC功能流程图解析及代码演示『
  8. android 关闭和管理所有的ACTIVITY或者是
  9. android studio 离线升级
  10. Android Studio:64K问题com.android.dex.