1:okhttp的责任链模式
顾名思义是将多个节点通过链条的方式连接起来,每一个节点相当于一个对象,而每一个对象层层相关,直接或者间接引用下一个对象(节点);直到链条中有一个节点处理头节点传下来的事件截止。
2:自定义View
onMeasure(测量),
measure的三种测量模式分别为
MeasureSpec.EXACTLY,
MeasureSpec.AT_MOST,
MeasureSpec.UNSPECIFIED,
onLayout(摆放),
OnDraw(绘制),
继承自View或者ViewGroup然后测量摆放绘制,然后做做动画,最后写写接口给调用者调用。
3:Glide的三级缓存
因为android默认给每一个应用分配16M的内存,如果加载过多的图片的话,为了防止内存溢出(其实要区分一下内存泄漏的概念)。
三级缓存策略,最实在的意义就是 减少不必要的流量消耗,增加加载速度 。
- 内存缓存,优先加载,速度最快
- 本地缓存,次优先加载,速度快
- 网络缓存,最后加载,速度慢,浪费流量
Bitmap 的创建非常消耗时间和内存,可能导致频繁GC。而使用缓存策略,会更加高效地加载 Bitmap,减少卡顿,从而减少读取时间。
内存作为一级缓存,本地作为二级缓存,网络加载为最后。其中,内存使用 LruCache ,其内部通过 LinkedhashMap 来持有外界缓存对象的强引用;对于本地缓存,使用 DiskLruCache。加载图片的时候,首先使用 LRU 方式进行寻找,找不到指定内容,按照三级缓存的方式,进行本地搜索,还没有就网络加载。
如果使用hashmap去存储图片时,当图片越来越多,那么会造成内存溢出,因为是强引用(对于强引用的系统不会回收)
如果改成软引用softReference,在android 2.3 以上的系统,对象会被提前回收。
ps:
软引用:软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适