面试笔记Glide

// Glide使用
RequestManager with = Glide.with(this);
RequestBuilder<Drawable> load = with.load(url);
load.into(iv); 
  • 为什么RequestManager能够管理生命周期?
    是因为Glide通过RequestMangerRetriever创建一个无UI的Fragment,并将这个Fragment的生命周期绑定到RequestManager上,所以当activity显示或隐藏或销毁时都会通过Fragment回调到Glide。

  • Request请求发送到哪里去了?
    Glide中有一个RequestTracker管理类,这个类中有两个队列 一个requests队列,一个pendingRequests队列, 请求过来之后,都是存入这两个队列当中;

  • Glide队列请求是如何处理的?
    当调用load.into(iv);方法后,所有的请求都会被添加到RequestTracker的队列中,这个类中有两个队列,一个是运行时队列requests,一个是等待队列pendingRequests;

    如果当前页面停止,onStop方法被回调,所有的运行中的请求都会停止,并且全部添加到等待队列pendingRequests中;

    当开始运行时,又会把所有等待队列中的请求 放到运行中去!

  • 队列是如何管理的?
    RequestManager with = Glide.with(this);
    通过这句代码,创建了一个RequestManager,并且在Glide.with方法中,为传入的this(Acitivity)创建一个无UI的Fragment,并且将Fragment的生命周期绑定到RequestManager上,当Activity触发了onstop等方法时,则会隐式的调用Fragment的onstop方法,再通过fragment的onstop调用RequestManager的onstop方法,以此来管理两个请求队列中的请求;

  • 图片是如何被加载的?
    1:当RequestManager调用requestTracker.runRequest的时候,
    2: 所有的请求都会构建成一个SingleRequest,并且开始调用begin方法运行;
    3:begin方法最终会调用engine.load方法
    4:根据request构建EngineKey
    5:根据EngineKey去活动缓存中获取数据
    6:如果获取不到,去内存缓存中获取数据
    7:如果获取不到,通过硬盘缓存的线程池去获取本地硬盘的数据
    8:如果获取不到本地的,通过网络的线程池去获取网络的数据

Glide跟其他框架相比优势在哪里?

1:具有完整的生命周期管理

2:支持GIF加载

3:使用强三级缓存,内存缓存(分为活动缓存和内存缓存)活动缓存指得是正在使用得图片用弱引用缓存,使用完成后到内存缓存,再到磁盘缓存;

4:占用内存小,它默认得编码格式是RGB565; Picasso用得ARGB8888 ImageLoader不支持Gif图片加载 而且也很老了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值