Glide源码分析——Request管理

本文深入分析了Glide如何管理图片加载请求(Request),包括RequestManager对象的创建,特别是针对Activity和Fragment的生命周期管理。Glide通过在UI线程中创建SupportRequestManagerFragment,并监听其生命周期来影响Request的管理。RequestManager根据SupportRequestManagerFragment的状态对Request进行启动、暂停或取消操作。此外,文章还探讨了早期Jetpack中类似的技术,展示了这种生命周期感知方法的巧妙之处。
摘要由CSDN通过智能技术生成

Glide作为一个优秀的图片加载框架,有很多值得我们学习的地方,这次我们来看看它是如何管理图片加载的请求吧;特别是它是如何感知Activity/Fragment的生命周期的方式。


 在Glide中会把每个图片加载请求封装成一个Request对象,而这些Request对象的管理里是RequestManager。在了解Request Manager对Request管理之前,我们先来看下Glide请求显示过程,请求过程大致如下时序图所示:
load_overview
 时序图中省略了RequestManager对象创建、Request具体加载过程等细节;关于Request具体加载过程,我们以后的文章再讲解,我们这篇文章主要看下RequestManager对象创建、它是如何感知Activity/Fragment生命周期以及它对Request的管理。

RequestManager对象创建

 RequestManager,从名称也能看出它是管理Request的对象,事实上也确实如此。RequestManager对象创建是在RequestManagerRetriever.get()方法过程中实现的, RequestManagerRetriver有多个重载的get()方法,这跟调用Glide.with()时传入的参数有关。

public RequestManager get(@NonNull Activity activity){
   ...}
public RequestManager get(@NonNull FragmentActivity activity){
   ...}
public RequestManager get(@NonNull Context context){
   ...}
public RequestManager get(@NonNull Fragment fragment){
   ...}
public RequestManager get(@NonNull android.app.Fragment fragment){
   ...}
public RequestManager get(@NonNull View view){
   ...}

虽重载方法有6个,但实际上创建RequestManager对象只有5种情况:

  • Activity
  • FragmentActivity
  • Fragment
  • android.app.Fragment
  • Application Context

除了ApplicationContext,其他几种情况都会创建一个SupportRequestManagerFragment(备注:Activity和android.app.Fragment情况会创建RequestManagerFragment,后面的分析都是基于SupportRequestManagerFragment,他们的原理是一致的)与创建的RequestManager对象关联;RequestManager对Request的管理会受SupportRequestManagerFragment生命周期的影响。接下来我们看下RequestManager对象创建过程,先看RequestManagerRetriever.get(FragmentActivity activity)方法

//RequestManagerRetriever.java
@NonNull
public RequestManager get(@NonNull FragmentActivity activity) {
   
  if (Util.isOnBackgroundThread()) {
   
    //如果是非UI线程,则调用get(Context context)方法,并传入Application Context
    return get(activity.getApplicationContext());<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值