android源码、开源框架解析

Glide框架初识

2022-03-06  本文已影响0人  三十五岁养老

Glide原理

优势

生命周期绑定

Glide通过在当前Activity/Fragment里添加一个Fragment,在Fragment的生命周期里回调LifecycleListener的相应方法,而RequestManager实现了该接口,所以就可以在相应的生命周期执行请求的开始和暂停等操作。

图片加载策略

image.png

缓存

三级缓存:内存缓存、硬盘缓存、网络

内存缓存 LruCache

LruCache 采用最近最少使用算法,设定一个缓存大小,当缓存达到这个大小之后,会将最老的数据移除,避免图片占用内存过大导致OOM。

主要线程池

public Glide build(@NonNull Context context) {
    if (sourceExecutor == null) {
        sourceExecutor = GlideExecutor.newSourceExecutor();//创建网络加载线程池对象
    }

    if (diskCacheExecutor == null) {
        diskCacheExecutor = GlideExecutor.newDiskCacheExecutor();//创建磁盘加载线程池对象
    }

    if (animationExecutor == null) {
        animationExecutor = GlideExecutor.newAnimationExecutor();//创建动画加载线程池对象
    }
    
}

自定义图片加载框架思路

高清加载大图

加载图片一般为了尽可能避免OOM都会按照如下做法:

  1. 对于图片显示:根据需要显示图片控件的大小对图片进行压缩显示。
  2. 如果图片数量非常多:则会使用LruCache等缓存机制,将所有图片占据的内容维持在一个范围内。

但是对于单个图片非常巨大,并且还不允许压缩。比如:世界地图、清明上河图、微博长图等 ,以上2种方案就不适用了。

解决方案:局部加载(BitmapRegionDecoder)

上一篇 下一篇

猜你喜欢

热点阅读