Glide与Fresco的对比

Glide:
1、多种图片格式的缓存,适用于更多的内容表现形式(如:Gif,WebP,缩略图、Video)
2、声明周期集成(根据Activity或者Fragment的生命周期管理图片加载请求)
3、高效处理Bitmap(bitmap的复用和主动回收,减少系统回收压力)
4、高效的缓存策略,灵活(Picasso只会缓存原始尺寸的图片,Glice可以缓存多种规格的),加载速度快且内存开销小(默认Bitmap格式的不同,使得内存开销是Picasso的一半)

Fresco:
1、最大优势在于5.0以下(最低2.3)的bitmap加载。在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem区)
2、大大减少OOM(在更底层的Native层对OOM进行处理,图片将不再占用App的内存)
3、适用于需要高性能加载大量图片的场景

自己写一个图片加载框架要考虑到的问题
1、异步加载:线程池
2、切换线程:Handler,没有争议吧
3、缓存:LruCache、DiskLruCache
4、防止OOM:软引用、LruCache、图片压缩、Bitmap像素存储位置
5、内存泄露:注意ImageView的正确引用,生命周期管理
6、列表滑动加载的问题:加载错乱、队满任务过多问题

1.1异步加载:
线程池,多少个?
缓存一般有三级,内存缓存、硬盘、网络。
由于网络会阻塞,所以读内存和硬盘可以放在一个线程池,网络需要另外一个线程池,网络也可以采用Okhttp内置的线程池。
读硬盘和读网络需要放在不同的线程池中处理,所以用两个线程池比较合适。
Glide 必然也需要多个线程池,看下源码是不是这样
Glide与Fresco的对比_第1张图片
防止OOM
加载图片非常重要的一点是需要防止OOM,上面的LruCache缓存大小设置,可以有效防止OOM,但是当图片需求比较大,可能需要设置一个比较大的缓存,这样的话发生OOM的概率就提高了,那应该探索其它防止OOM的方法。

Java的四大引用:
强引用: 普通变量都属于强引用,比如 private Context context;
软应用: SoftReference,在发生OOM之前,垃圾回收器会回收SoftReference引用的对象。
弱引用: WeakReference,发生GC的时候,垃圾回收器会回收WeakReference中的对象。
虚引用: 随时会被回收,没有使用场景。

你可能感兴趣的:(操作技巧)