双重检测锁模式(由于JVM底层模型原因,偶尔会出问题,不建议使用)
静态内部类式(线程安全,调用效率高,可以延时加载)
枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)
10. 通过静态内部类实现单例模式有哪些优点
线程安全,调用效率高,可以延时加载
11. synchronized volatile关键字有什么区别?以及还有哪些同样功能的关键字
(1) volatile是变量修饰符,而synchronized则作用于一段代码或者方法。
(2) volatile只是在线程内存和main memory(主内存)间同步某个变量的值;而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源。
const、final、lock
12. 界面卡顿的原因有哪些?
UI线程(main)有耗时操作
视图渲染时间过长,导致卡顿
13. 造成OOM/ANR 的原因?
OOM: (1)不恰当地使用static关键字 (2)内部类对Activity的引用 (3)大量Bitmap的使用会导致程序包运行时的内存消耗变大 (4)游标Cursor对象用完应该及时关闭 (5)加载对象过大 (6)相应资源过多,来不及释放。
ANR: (1)在5秒内没有响应输入的事件(IO操作耗时、数据库操作复杂耗时、主线程非主线程产生死锁等待、网络加载/图片操作耗时、硬件操作耗时) (2)BroadcastReceiver在10秒内没有执行完毕(Service binder数量达到上限、Service忙导致超时无响应)
14. Activity与Fragment生命周期有何联系
在创建的过程中,是Activity带领着Fragment,在销毁的过程中,是Fragment带领着Activity。
15. Glide三级缓存
内存缓存,磁盘缓存、网络缓存(由于网络缓存严格来说不算是缓存的一种,故也称为二级缓存)。缓存的资源分为两种:原图(SOURCE)、处理图(RESULT)(默认)。
内存缓存:默认开启的,可以通过调用skipMemoryCach